我確定這是一個非常簡單的問題。下面的代碼顯示了我想要做的事:有條件地初始化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