Sono sicuro che questa è una domanda molto semplice. Il seguente codice mostra quello che sto cercando di fare:Il modo giusto per inizializzare condizionalmente una variabile membro C++?
class MemberClass {
public:
MemberClass(int abc){ }
};
class MyClass {
public:
MemberClass m_class;
MyClass(int xyz) {
if(xyz == 42)
m_class = MemberClass(12);
else
m_class = MemberClass(32);
}
};
Questo non si compila, perché m_class
è stato creato con un costruttore vuoto (che non esiste). Qual è il modo giusto per farlo? La mia ipotesi sta usando i puntatori e la creazione di istanze m_class
usando new
, ma spero che ci sia un modo più semplice.
Modifica: Avrei dovuto dirlo in precedenza, ma il mio problema attuale ha un'ulteriore complicazione: ho bisogno di chiamare un metodo prima di inizializzare m_class, al fine di configurare l'ambiente. Quindi:
class MyClass {
public:
MemberClass m_class;
MyClass(int xyz) {
do_something(); // this must happen before m_class is created
if(xyz == 42)
m_class = MemberClass(12);
else
m_class = MemberClass(32);
}
};
È possibile ottenere questo risultato con trucchi di elenco di inizializzazione di fantasia?
Grazie! Ho aggiornato la mia domanda: in realtà ho bisogno di eseguire un metodo prima di creare m_class. È possibile? Forse potrei farlo in "classInit", ma non sarebbe molto elegante. –
Imparato molto, grazie! :-) –
Quando ho visto l'uso dell'operatore virgola, sapevo che la persona che rispondeva a questa domanda era intelligente. Quando ho visto l'uso della funzione try block, sapevo che la persona che rispondeva a questa domanda era litb. Quando ho visto che la persona che rispondeva a questa domanda era illuminata ... beh, immagino che sapessi già che era lui :) – mmocny