可能重复:
为什么模板只能在头文件中实现?
我意识到在 SO 上已经很少有这样的话题,但我没有找到任何可以回答我的问题的话题。
但不幸的是,我不断收到错误:
/home/USER/testcode/cpp_workshop/main.cpp:-1: 错误: 未定义对“Singleton::Instance()”的引用:-1: 错误: collect2: ld
我的单例.h
#ifndef SINGLETON_H
#define SINGLETON_H
template <typename T>
class Singleton
{
public:
static T& Instance();
protected:
virtual ~Singleton();
inline explicit Singleton();
private:
static T* _instance;
static T* CreateInstance();
};
template<typename T>
T* Singleton<T>::_instance = 0;
#endif // SINGLETON_H
单例.cpp
#include "singleton.h"
#include <cstdlib>
template <typename T>
Singleton<T>::Singleton()
{
assert(Singleton::_instance == 0);
Singleton::_instance = static_cast<T*>(this);
}
template<typename T>
T& Singleton<T>::Instance()
{
if (Singleton::_instance == 0)
{
Singleton::_instance = CreateInstance();
}
return *(Singleton::_instance);
}
template<typename T>
inline T* Singleton<T>::CreateInstance()
{
return new T();
}
template<typename T>
Singleton<T>::~Singleton()
{
if(Singleton::_instance != 0)
{
delete Singleton::_instance;
}
Singleton::_instance = 0;
}
这就是我所说的(使用 normall - 不是模板或任何东西 - 类Game
)
Singleton<Game>::Instance().run();