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