最近在用 template 编写singleton模式代码的时候,遇到了一个问题,template要求实现要在同一个文件中,所以,我只能在h文件中定义并实现 singleton 模式类。类中必然要有静态成员变量,静态成员变量的定义成了问题,如果我放在cpp文件中,模板是不支持的,放在h文件中,如果h文件被多次包含,会出现 重定义的情况。
回来,请教高手,得知,可以在初始化静态成员变量前面加上__declspec(selectany) ,这样编译器会自动剔除对该静态成员的重复定义。
最近半年也一直用WTL,ATL,COM等。其实在WTL,ATL中已经大量使用了__declspec(selectany)方法。我猜想这是为解决 template单文件编程和静态成员变量在头文件中定义会出现重复定义矛盾而提出的。
总的来说:
__declspec(selelctany) 使在头文件中定义静态成员变量可行。
本文探讨了使用template实现singleton模式时遇到的问题及解决方案。通过在头文件中定义静态成员变量,并利用__declspec(selectany)避免重复定义错误。
1111

被折叠的 条评论
为什么被折叠?



