Sarà possibile e/o utile definire una funzione operator "" (...)
come amico?C++ 0x, valori letterali definiti dall'utente con operatore amico ""()
class Puzzle {
friend Puzzle operator "" _puzzle(const char*, size_t);
...
};
void solve(Puzzle);
int main() {
solve("oxo,xox"_puzzle);
};
Sto pensando di "utile" in particolare, a causa della regola che operator ""
sono definite in un namespace solo - non ultimo perché identificatori che iniziano con _
sono riservati nel namespace globale. È questo friend
infrangere questa regola qui? Quindi, non ci sarebbe alcun beneficio con questo incapsulamento non proprio, giusto?
Ho davvero pensato di averlo letto da qualche parte, che i suffissi * dovrebbero * essere dichiarati solo all'interno di uno ** spazio dei nomi **. Non riesco a ricordare dove - ma era solo un suggerimento, non un requisito. E quindi, probabilmente era l'unico consiglio per "buone pratiche". Buon punto a proposito della funzione ** template ** friend. Questo non è un problema con il solito schema * friend *, quello che almeno uno degli argomenti della funzione friend è un'istanza di classe stessa - quindi non c'è alcun problema di denominazione. – towi
Ricordo di aver visto qualcosa di simile nei documenti di posizione precedenti. Prova n2378.pdf sezione 5: An Idiom. Qui dicono: 1. Queste funzioni non vengono trovate tramite ADL quando vengono richiamate tramite valori letterali invece di forma operatore esplicita. 2. Questo potrebbe tentare il posizionamento in globale. 3. Ciò porterebbe a conflitti anche nel codice che non usa il letterale. 4. Quindi metti le operazioni letterali in un namespace e metti una direttiva using per portarle a livello globale. – emsr
Volevo solo notare che non è possibile * non * usare la funzione friend in privato all'interno della classe, vedere [questa domanda] (http://stackoverflow.com/questions/8207633/whats-the-scope-of-inline-friend -Funzioni). – Xeo