用于深层继承的C++模板单例基类

Vap*_*ire 0 c++ singleton templates

所以我有一个简单的单例模板基类(为了问题目的缩小):

template <typename T>
class Singleton {
public:
    static T& instance() {
        static T me;
        return me;
    }
};
Run Code Online (Sandbox Code Playgroud)

现在我想要一个"基类是单身":

class Base : public Singleton<Base> {
public:
    void print() { std::cout << &instance() << std::endl; }
}
Run Code Online (Sandbox Code Playgroud)

我现在想要的是从这个基类派生子类,它们是他们自己的单例:

class A : public Base {
    // ...
}

class B : public Base {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

当然,如果我这样做

A::instance().print();
B::instance().print();
Run Code Online (Sandbox Code Playgroud)

在这两种情况下我都得到相同的地址.有没有办法实现这个目标?

如果你想知道为什么:我想编写一个ResourceManager由类继承的基类ImageManager,一个类'AudioManager'等.我希望他们不要实际共享相同的实例,但仍然只有每个经理一个实例......

Pup*_*ppy 5

您必须将Base作为模板并将其传递给Singleton,然后继承,Base<A>如果您希望实现此目的.或者,如果你想基地是一个Singleton A/B是一个Singleton,那么他们将不得不从继承Singleton<A>,Singleton<B>除了Base.

亲爱的领主,男人,单身人士是你和你的孩子百代的诅咒.你为什么要这样对自己?