Je suis sûr que c'est une question très simple. Le code suivant montre ce que je suis en train de faire:Bonne façon d'initialiser de manière conditionnelle une variable membre 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);
}
};
Cela ne compile pas, parce que m_class
est en cours de création avec un constructeur vide (qui n'existe pas). Quelle est la bonne façon de faire cela? Ma conjecture utilise des pointeurs et instanciant m_class
en utilisant new
, mais j'espère qu'il y a un moyen plus facile.
Editer: J'aurais dû le dire plus tôt, mais mon problème actuel a une complication supplémentaire: J'ai besoin d'appeler une méthode avant d'initialiser m_class, afin de configurer l'environnement. Donc:
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);
}
};
Est-il possible d'atteindre cet objectif avec des astuces de liste d'initialisation?
Merci! J'ai mis à jour ma question - J'ai en fait besoin d'exécuter une méthode avant de créer m_class. Est-ce possible? Peut-être que je pourrais le faire dans "classInit", mais ce ne serait pas très élégant. –
J'ai beaucoup appris, merci! :-) –
Quand j'ai vu l'utilisation de l'opérateur de virgule, je savais que la personne répondant à cette question était intelligente. Quand j'ai vu l'utilisation de la fonction try block, je savais que la personne répondant à cette question était litb. Quand j'ai vu la personne répondre à cette question était litb ... eh bien je suppose que je savais déjà que c'était lui :) – mmocny