有没有一种标准的方法可以在初始化阶段运行一些代码并定义初始化的顺序
Is there a standard way to run some code during initialization phase and define the order of initialization?
我刚刚意识到,我已经用下面的代码结束了,只是为了能够在启动过程中进行一些初始化。我在问我是否遗漏了什么,是否有一些标准的方法可以在初始化期间运行一些代码,尤其是如果我们可以根据需要定义初始化顺序,因为初始化并没有完全按照预期进行。
#define concat(a,b) a##b
#define autoname1(cnt) concat(autoname_,cnt)
#define autoname autoname1(__COUNTER__)
#define onStartupExecute_(func,structname) void func();
struct structname{structname(){func();}} autoname;
#define onStartupExecute(func) onStartupExecute_(func,autoname)
使用上述代码时,例如,我们定义:
void someInitialization(){doSomething1;doSomething2;}
onStartupExecute(someInitialization)
onStartupExecute
产生的代码是:
struct autoname_12{autoname_12(){someInitialization();}} autoname_13;
因此在主之前的启动期间执行代码CCD_ 2。
我认为应该有一些更简单的方法来做这件事!
如果初始化代码被拆分到几个[独立]编译单元,那么使用单个静态list<function...>
的解决方案就不方便了。您可以使用Nifty计数器根据静态定义的实体的依赖关系自动排序调用。
是的,专用类的静态实例是在main()
之前和之后执行某些代码的常见方式。您应该记住,在给定的编译单元中,它们按照定义的顺序初始化,并以相反的顺序销毁。几个独立编译单元(.o
文件)之间的初始化顺序可能会有所不同,并取决于单元的依赖关系。NiftyCounter
技术允许或多或少明确地对这样的模块进行排序。
使用GCC,您还可以为构造函数函数属性赋予优先级。
相关文章:
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 运行时C++数组初始化问题
- 在静态初始化期间运行代码
- 程序在初始化期间未与数组一起运行
- 在运行时,何时完全初始化 std 库才能在不破坏代码的情况下使用它?
- 运行时错误,变量 B 未初始化
- 如何在运行时使用静态成员函数初始化静态成员变量
- 无法初始化某些指针,在运行时中断程序
- opencv Mat 初始化,运行时错误为零
- 为什么我的全球外部lambda变量在运行时不初始化
- 初始化期间的运行时类方法替换
- 如何在运行时使用构造函数初始化类中私有的数组
- 如何在不运行的情况下识别LUA脚本中的非初始化变量
- 我正在尝试运行这个程序,但它给出了错误 initwindow() 未初始化
- C++ - 在初始化类成员之前运行函数
- 不带操作员的对象的数组初始化,复制构造函数或默认构造函数和运行时参数
- CRT初始化:运行时错误 - CRT未初始化
- 运行主后,是否可以初始化静态成员变量
- C++ SDL 初始化所有内容并获取运行时错误
- 当使用Windows可执行文件作为DLL时,如何初始化C运行时