SOにはこのようなトピックはほとんどないことを認識していますが、私の問題に答えてくれるものは見つかりませんでした.
このチュートリアルhttp://www.codeproject.com/Articles/4750/Singleton-Pattern-A-review-and-analysis-of-existinを使用して、テンプレート シングルトン クラスを既に作成しています。
残念ながら、エラーが発生し続けます:
/home/USER/testcode/cpp_workshop/main.cpp:-1: エラー: `Singleton::Instance()' への未定義の参照:-1: エラー: collect2: ld
私のsingleton.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;
}
そして、それが私がそれを呼び出す方法です(通常の場合-テンプレート化されていないか、何もありません-クラスGame
)
Singleton<Game>::Instance().run();