旧版代码库具有以下构造:
template< typename T >
class Singleton {
private:
static T* _instance;
public:
inline static T& instance() {
if (_instance == 0) { // warning here
_instance = new T;
}
return *_instance;
}
};
通常这样使用:
class Foo : public Singleton<Foo>
{
};
警告是从包含Foo.hh
的任何文件中产生的。
当前,Foo.cpp
确实包含以下行:
template<>
Foo* Singleton<Foo>::_instance = nullptr;
但是它对编译没有帮助。在定义Foo之前,有没有办法提供Singleton :: _ instance的定义?
XCode 9.2 Mac OS X 10.12.6
答案 0 :(得分:2)
在头文件中添加
template <typename T> T* Singleton<T>::_instance = nullptr;
这仍然是一个脱机定义,但与特定专业无关。然后,您应该可以删除该行
template<> Foo* Singleton<Foo>::_instance = nullptr;
因为上面的非专业定义已经对所有实例都做了相同的操作。