Ich bin mir sicher, das ist eine wirklich einfache Frage. Der folgende Code zeigt, was ich versuche zu tun:Richtiger Weg, um eine C++ Membervariable bedingt zu initialisieren?
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);
}
};
Dies gilt nicht kompilieren, weil m_class
mit einem leeren Konstruktor erstellt werden (die es nicht gibt). Was ist der richtige Weg? Meine Vermutung ist Zeiger und Instanziieren m_class
mit new
, aber ich hoffe, es gibt einen einfacheren Weg.
Edit: Ich hätte früher gesagt werden sollen, aber mein aktuelles Problem hat eine zusätzliche Komplikation: Ich muss eine Methode vor der Initialisierung m_class aufrufen, um die Umgebung einzurichten. Also:
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);
}
};
Ist es möglich, dies mit ausgefallenen Initialisierungslistentricks zu erreichen?
Danke! Ich habe meine Frage aktualisiert - ich muss vor dem Erstellen von m_class eine Methode ausführen. Ist das möglich? Vielleicht könnte ich es in "classInit" machen, aber das wäre nicht sehr elegant. –
Viel gelernt, danke! :-) –
Als ich den Comma-Operator sah, wusste ich, dass die Person, die diese Frage beantwortete, clever war. Als ich die Verwendung der Funktion try block sah, wusste ich, dass die Person, die diese Frage beantwortete, litb war. Als ich die Person sah, war diese Frage zu beantworten litb ... na ja ich denke, ich es schon kannte ihn war :) – mmocny