我有一个 Visual Studio 解决方案,其中某些“插件”类向工厂类注册,以便可以按名称创建“插件”。这些插件与工厂一起驻留在静态库项目中。
注册通过一个 volatile 静态注册模板类进行,每个模板类都在其自己的插件编译单元中(因此注册过程由每个插件“完成”,并且没有可用插件的中心信息),例如:
volatile static StaticPluginRegisterHelper<PluginClass> s_register;
但问题是,如果 PluginClass 没有在代码的其他地方逐字使用,链接器会选择优化代码,即上面的静态永远不会被执行。
在我看来,这就像一个编译器或链接器错误,因为我已经明确指出静态是易失的(即“不要触摸!”):)
解决方法显然是将上面的注册移动到我知道总是包含的编译单元,这当然有效。然而,它并不那么整洁。
想法?