假設我有一個名爲Poem的類。在main()之前註冊類/函數/東西
class Poem{
virtual void recite() = 0;
}
而且我有上百個,其描述了一個子類的.cpp和.HPP文件,如以下
class TheRaven : public Poem{
void recite() { std::cout << "NEVERMORE!" << endl; }
}
和喜歡。在主函數中,我希望能夠遍歷每一個可能的Poem子類並調用它們的recite()函數。所以我做了一個類:
class PoemRegistry{
std::map<std::string, Poem*> poems;
PoemRegistry& getGlobal(); // returns a static global registry
void register(const std::string& poemname, Poem * thepoem);
};
然後爲每個詩的子類.cpp文件,我把以下內容。
class TheRavenRegistor{
TheRavenRegistor(){
PoemRegistry::getGlobal().register("theraven", new TheRaven());
}
}
TheRavenRegistor registor();
忍者編輯:我把全球一流那裏,忘記了它
因此很容易,我就與#define和模板的快捷方式。
現在,問題是,我剛剛聽說靜態類初始化失敗。我想這會對它免疫,或者我在這裏肯定缺少什麼?還是有更優雅的東西可以用於這個目的?
的目的是什麼?你想爲'main()'之前初始化的每個全局對象調用'recite()'嗎? – iammilind
什麼時候'TheRavenRegistor'被實例化? –
上面的代碼中缺少某些內容,因爲沒有任何內容需要靜態初始化。 –