C++ 在main()之前注册类/函数/事物

C++ 在main()之前注册类/函数/事物,c++,C++,假设我有一门课叫诗 class Poem{ virtual void recite() = 0; } 我有数百个.cpp和.hpp文件,它们描述了一个子类,如下所示 class TheRaven : public Poem{ void recite() { std::cout << "NEVERMORE!" << endl; } } 忍者编辑:我把全局类放在那里,忘了它 为了方便起见,我用#定义和模板制作了一个快捷方式 现在,问题是,我刚刚听说静态类初始

假设我有一门课叫诗

class Poem{
   virtual void recite() = 0;
}
我有数百个.cpp和.hpp文件,它们描述了一个子类,如下所示

class TheRaven : public Poem{
    void recite() { std::cout << "NEVERMORE!" << endl; }
}
忍者编辑:我把全局类放在那里,忘了它

为了方便起见,我用#定义和模板制作了一个快捷方式


现在,问题是,我刚刚听说静态类初始化失败。我想这将是免疫,或是有什么我肯定错过了这里?还是有更优雅的东西可以用于此目的?

这是单例设计模式的一个示例。不要使用静态全局,因为初始化顺序在编译单元之间是未定义的。 相反,请使用以下内容:

PoemRegistry& PoemRegistry::getGlobal()
{
  static PoemRegistry theRegistry; // construction guaranteed when first call
  return theRegistry;
} 
将getGlobal()方法设置为静态

class PoemRegistry
{
public:
  static PoemRegistry& getGlobal();
... 

这是Singleton设计模式的一个示例。不要使用静态全局,因为初始化顺序在编译单元之间是未定义的。 相反,请使用以下内容:

PoemRegistry& PoemRegistry::getGlobal()
{
  static PoemRegistry theRegistry; // construction guaranteed when first call
  return theRegistry;
} 
将getGlobal()方法设置为静态

class PoemRegistry
{
public:
  static PoemRegistry& getGlobal();
... 

目的何在?你想为在
main()
之前初始化的每个全局对象调用
readate()
吗?
TheravenRegister
什么时候被实例化?上面的代码缺少了一些东西,因为没有任何东西需要静态初始化。是的,忘了它,现在它就在那里了,我的错@是的,假设这就是目的。可能是我需要一个可用诗歌的列表,并根据用户的选择背诵其中任何一首。目的是什么?你想为在
main()
之前初始化的每个全局对象调用
readate()
吗?
TheravenRegister
什么时候被实例化?上面的代码缺少了一些东西,因为没有任何东西需要静态初始化。是的,忘了它,现在它就在那里了,我的错@是的,假设这就是目的。这可能是因为我需要一个可用诗歌的列表,并根据用户的选择背诵其中任何一首。谢谢,忘记了静态关键字,但这就是我的想法。谢谢,忘记了静态关键字,但这就是我的想法。