我很确定这个问题并不新鲜,而且很确定它很难解决。希望我对后者不对。
我正在尝试在我的程序中使用Modern C ++ Design中的Loki :: Singleton。
然而,我似乎无法让它跨DLL工作。我想我知道为什么会这样:模板化的代码在每个源模块中实例化,因此每个模块都有自己的全局变量,而不是一个全局变量。
显然,这使得Singleton非常单一。
有没有办法绕过这种行为?
答案 0 :(得分:2)
我在Loki源目录中看到他们有一个特定的SingletonDLL directory被测试,看起来他们使用一个导出的,显式实例化的模板(这将起作用)。希望它包含您想要的代码。
答案 1 :(得分:1)
请注意,这不会解决问题。显式实例化和导出的单例应该可以解决这个问题...
-Rick
基本上查看#pragma data_seg here,您需要在代码的共享部分中声明单例的实例。默认情况下,静态范围限定为dll。
模板可能会变得棘手,但这是成功的途径,不涉及传递/复制静态数据。
答案 2 :(得分:0)
你可能是正确的,每个DLL都有自己的单例实例。我对Loki的实现并不熟悉,source code并不是很有趣。
可能的解决方案是: