ho questo (semplificato) Situazione:risoluzioni di portata più brevi per le classi nidificate privati
class Tree {
class Iterator {
class Stack {
// ...
}
public:
// ...
}
public:
//...
}
Non voglio ingombrare le definizioni delle classi e decido di scrivere solo dichiarazioni di metodo all'interno delle classi stesse. Più tardi (mooolto basso) quando voglio definire, ad esempio, copiare operatore di assegnamento in questo modo:
Tree::Iterator::Stack& Tree::Iterator::Stack::operator = (const Stack& p_stack) {
// ...
}
ho a che fare con queste risoluzioni portata brutte. Mi chiedo se c'è un modo per accorciarli, perché using
e typedef
, come li conosco, non mi offrono nulla.
EDIT: Dal momento che questo non è CodeReview, e @Yulian chiesto chiarimenti, ecco la versione corta:
sto facendo un'implementazione iterativa Red-Black Tree. Menzionato class Iterator
è per il movimento di post-ordine (quindi è specifico per il post-ordine) e class Stack
è la sua classe di utilità. In questo programma breve, solo class Tree
utilizza Iterator
e solo Iterator
utilizza Stack
.
Dopo il promemoria di @ Yulian, ho ricordato che sarebbe stato più orientato agli oggetti se le classi menzionate fossero definite separatamente (forse anche come modelli), ma questo è un programma piccolo e autonomo e sto cercando di mantenere in quel modo
EDIT: autonomo significa anche che si tratta di un caso isolato di programma, file singolo, quindi nessun file .h o codice esterno riutilizzo di sorta. Perché? Perché ACADEMIA (e restrizioni arbitrarie associate).
Perché non usare '' e 'typedef' ti compri qualcosa? – lcs
Sono classi private, quindi non posso semplicemente dire 'usando Stack = Tree :: Iterator :: Stack;' o qualcosa di simile - 'Iterator' e' Stack' sono inaccessibili. –
È possibile dichiarare la classe nidificata e quindi definire le funzioni membro in linea, quando si definisce la classe in un secondo momento. Ma penso che il codice sia a posto. Se si dispone anche di una serie di spazi dei nomi per gestire _inside_ le definizioni di funzione, si possono effettivamente inserire dichiarazioni 'using' all'interno di ciascuna definizione di funzione. – SirGuy