gpt4 book ai didi

c++ - 通过来自不同模块的预处理器/模板生成列表/集合,并且必须在链接之前填写

转载 作者:行者123 更新时间:2023-11-28 08:00:04 24 4
gpt4 key购买 nike

据我所知,我有一些全局变量(类)是在 main() 调用之前创建的。我需要一些技术从我的代码的任何部分将数据添加到全局或作为该类的成员的列表中,并且必须在链接器之前填充。在全局创建的类中使用它。是否可以?我没有找到任何类似的解决方案甚至问题,因此我们将不胜感激。

详细示例:

我有一个单例类,它有一个在构造函数中填充的变量。所有其他类在运行时使用来自类的数据,有人早有人晚。单例类是在 main 函数的开头创建的。我在不同的项目中使用单例,它对所有项目和模块几乎都是通用的数据,除了应该显示对该模块的要求的特殊标志。如果单例抛出异常程序退出并且我们在执行的第一步就知道它,因为单例在 main 的第一行创建。所以单例有很多所有项目的通用数据,但我需要添加标志以指向单例,每个模块都需要哪些数据。我已经为 main 创建了模板,所以对于每个项目,我都有相同的 main,只是简单地定义 PROJECT_NAME 之后我将 .cpp 添加到项目中,他们必须注册哪些数据是必需的,哪些不是。

这个解释看起来不是很完善,如果看不懂别犹豫,我会精心整理的。

编辑:

我仍在网上寻找解决方案,发现 constexpr 看起来像我需要的,但目前并非所有编译器都支持它,是否有一些解决方法?

最佳答案

第一步是不使用全局变量,而是在全局函数中使用静态变量。第一次调用函数时,变量将被初始化,然后函数返回对变量的引用。

my_class& instnace() {
static my_class i;
return i;
}

列表示例:

std::list<my_class>& global_list() { 
static std::list<my_class> m; return m;
}


static int x = []()->int{ global_list().push_back(my_class); return 0;}();

关于c++ - 通过来自不同模块的预处理器/模板生成列表/集合,并且必须在链接之前填写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11710156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com