我确定这是一个非常简单的问题。下面的代码显示了我想要做的事:有条件地初始化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);
}
};
这并不编译,因为m_class
正在用一个空的构造(不存在)创建。这样做的正确方法是什么?我的猜测是使用指针并使用new
实例化m_class
,但我希望有一种更简单的方法。
编辑:我应该早些说过,但我的实际问题有一个额外的复杂:我需要在初始化m_class之前调用一个方法,以便设置环境。所以:
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);
}
};
是否有可能实现这个花哨的初始化列表技巧?
谢谢!我更新了我的问题 - 我实际上需要在创建m_class之前运行一个方法。那可能吗?也许我可以在“classInit”中做到这一点,但那不会很优雅。 – 2009-06-18 19:11:01
了解了很多,谢谢! :-) – 2009-06-18 19:42:02