C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 确保在main()之前调用静态方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个工作类的集合,我需要能够使用单个工厂动态构造这些类的实例.这背后的原因是新的工人类经常被写入,而且每次添加新的工人类时,我不必更新每个工人类型的工厂类.

目前的工作方式如下:我有一个名为WorkerImplementationList的类,它带有一个静态方法

template <typename T>
    WorkerImplementationList::registerWorkerFactoryMethod<T>(const std::string&)

在内部数据结构中存储指向T :: newInstance的指针,稍后将由工厂检索.在每个worker类中都有一个名为_dummyInstanceRegistrationVariable的静态int.在每个工作类的.cc文件中,我有以下行(以FooWorker为例):

int FooWorker::_dummyInstanceRegistrationVariable =
    WorkerImplementationList::registerWorkerFactoryMethod<FooWorker>("FooWorker");

我想要发生的是在构造类的任何实例之前初始化静态变量.当worker类被编译成包含main()的相同二进制文件时,这似乎工作得很好.但是,当FooWorker在库(比如libblahapp_workers.a)中并且主可执行文件链接该库时,看起来_dummyInstanceRegistrationVariable在main()启动之后才会初始化(我假设在构造FooWorker的第一个实例时它已初始化),这对我的目的来说太晚了.

我也尝试构建一个WorkerImplementationRegisterer< T>全局范围内的对象,它在构造时注册适当的工作类型,但是当工作类位于main()外部的库中时,我再次遇到问题;在main()开始之前,不构造全局范围的对象.

静态链接我的工作者库会解决这个问题吗?我缺少一个更优雅的解决方案吗?你能给我的任何帮助都将不胜感激.

解决方法

这听起来像链接器只引入它需要的对象,而不是拉入具有全局变量的对象.那么全局根本不存在,所以初始化顺序是一个没有实际意义的点.

静态库是一个真正的问题,没有通用的解决方案.

知道链接器立即从库中获取整个编译单元(在我看过的所有系统上),您可能想出一些方法将这个全局变量放入需要的编译单元中.

大佬总结

以上是大佬教程为你收集整理的c – 确保在main()之前调用静态方法全部内容,希望文章能够帮你解决c – 确保在main()之前调用静态方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: