Maneira correta de inicializar condicionalmente uma variável de membro C ++?
Tenho certeza que esta é uma pergunta muito simples. O código a seguir mostra o que estou tentando fazer:
<code>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); } }; </code>
Isso não compila, porquem_class
está sendo criado com um construtor vazio (que não existe). Qual é o jeito certo de fazer isso? Meu palpite é usar ponteiros e instanciarm_class
usandonew
, mas espero que haja um caminho mais fácil.
Editar: Eu deveria ter dito anteriormente, mas o meu problema real tem uma complicação adicional: eu preciso chamar um método antes de inicializar m_class, a fim de configurar o ambiente. Assim:
<code>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); } }; </code>
É possível conseguir isso com truques de lista de inicialização?