【发布时间】:2016-12-15 09:46:52
【问题描述】:
我正在制作一个 DLL。我想在命名空间内为每个包含MyTools.h 的编译单元创建一个唯一的全局变量(在我的例子中是一个IBitmap 结构)。这是我在MyTools.h 中的代码:
namespace MyTools
{
const IBitmap BITMAP_CONTROL_BACKGROUND;
}
它初始化一个“空”变量。我想初始化这个变量,调用 MyClass 的一个方法(返回一个 IBitmap)(稍后将实例化),但是当我在每个将使用这个变量的进程之前执行此操作时:
BITMAP_CONTROL_BACKGROUND = myClass->LoadIBitmap(CONTROL_BACKGROUND, CONTROL_BACKGROUND_PATH, 1);
编译器告诉我BITMAP_CONTROL_BACKGROUND 是常量,所以我不能这样做。
稍后初始化并保持 var 全局的(最佳)方法是什么?
【问题讨论】:
-
查找单例设计模式及其在 C++ 中的实现。
-
@ilotXXI:单身适用于
class。我只需要命名空间/变量,而不是整个类。 -
删除 const,使用指针(智能指针),在创建时使用 null 进行初始化,这样您就可以检查它是否已经被初始化。根据需要初始化指针...
-
解决方案:不要使用全局状态;)
-
@SimonKraemer:我无法删除
const。IBitmap *BITMAP_CONTROL_BACKGROUND;会给我链接器错误,因为当我包含多次相同的 .h 时它已经定义
标签: c++ constants global lazy-initialization