один из вариантов через тимплейты:
Что то вроде:
#include <iostream>
template <class T> class Singleton
{
protected:
Singleton(){};
Singleton(const Singleton&);
public:
static T& GetInstance()
{
static T instance;
return instance;
}
};
class AnotherSingleton : public Singleton<AnotherSingleton>
{
private:
int i;
public:
void SomeFunc()
{
i = 10;
std::cout<< i;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
AnotherSingleton::GetInstance().SomeFunc();
return 0;
}
Это примерный код, его можно улучшить.
Кстати в с++11 такой код уже будет являться тред сейфовым.
На самом деле такой класс можно очень хорошо улучшить, но для примера подойдет.