反正我可以修改這個代碼示例在C++中模擬靜態構造函數?
#include <stdlib.h>
#include <iostream>
class Base {
public:
Base() {
if(!m_initialized) {
static_constructor();
m_initialized = true;
}
}
protected:
virtual void static_constructor() {
std::cout << "Base::static_constructor()\n";
}
private:
static bool m_initialized;
};
bool Base::m_initialized = false;
class Derived : public Base {
void static_constructor() {
std::cout << "Derived::static_constructor()\n";
}
};
int main(int argc, char** argv) {
Derived d;
return(EXIT_SUCCESS);
}
這樣Derived::static_constructor()
被調用,而不是基地的?我想初始化一堆靜態變量,最合理的地方是在類中的某處。
剛剛意識到我不能真的使用'm_initialized',因爲那麼只有一個派生類可以永遠得到初始化... – mpen 2009-09-07 21:20:20
我基本上只需要從基地代碼複製到每個派生類? – mpen 2009-09-07 21:21:11
不直接;但有辦法獲得你想要的東西。你需要初始化器在啓動時運行還是第一次實例化? – bdonlan 2009-09-07 21:27:10