c++ - 是否有一种标准方法可以在初始化阶段运行一些代码并定义初始化顺序?

标签 c++

我刚刚意识到我已经以下面的代码结束,只是为了能够在启动期间进行一些初始化。 我在问我是否遗漏了什么,是否有一些标准方法可以在初始化期间运行一些代码,特别是如果我们可以根据需要定义初始化顺序,因为初始化没有完全按预期进行。

#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;

因此在启动期间,在 main 之前执行代码 someInitialization

我认为应该有一些更简单的方法来做到这一点!

最佳答案

如果初始化代码被拆分到多个[独立]编译单元,那么使用单个静态的解决方案 list<function...>不方便。您可以使用 Nifty Counters根据依赖关系自动对静态定义实体的调用进行排序。

是的,专用类的静态实例是在main() 之前和之后执行一些代码的常用方法。 .您应该记住,在给定的编译单元中,它们按照定义的顺序进行初始化,并以相反的顺序销毁。几个独立编译单元(.o 文件)之间的初始化顺序可能会有所不同,具体取决于单元的依赖关系。 NiftyCounter技术允许或多或少明确地订购这些模块。

关于c++ - 是否有一种标准方法可以在初始化阶段运行一些代码并定义初始化顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25618450/

相关文章:

c++ - 在接口(interface)中调用已删除的构造函数 (C++)

c++ - 为什么我在打印这个结构指针时出错?

c++ - 在 .h 文件中包含仅用于私有(private)数据的 header

c++ - Cygwin gcc 在 IDE 中编译失败,提示 'exit' 未声明

C++ Windows : Access same variable from main process and CallWndProc process

C++ 在函数中拆分字符串类不使用 strtok()

c++ - 实现独立于平台的 Glob

python - 需要脚本来分析进程转储文件(Windows)

c++ - 如何在自己的函数中最好地处理 Mat 中的不同数字格式

C++,指针数组,指向双向链表中的条目