1

如何返回对象或调用基类为单例的派生类的 getInstance

4

1 回答 1

1

您将不得不使用 C++ 中不支持的虚拟静态方法(据我所知,它在 Delphi 中受支持 - 好奇)。

您必须决定两个类或每个类是否只有一个实例(例如,如果您通过 GetInstance 创建一个 Derived 实例,您是否能够创建 Base 实例)。

在这些类中没有办法解决这个问题,你必须创建一个类工厂。类似的东西(我已经省略了单例实现以使这个想法更清晰 - 显然你知道,如何实现一个)

class SingletonFactory
{
    template<typename T>
    static T * GetInstance()
    {
        return T.GetInstance();
    }
};

class Base
{
    friend class SingletonFactory;

private:
    static Base * GetInstance()
    {
        // ...
    }

protected:
    Base()
    {
    }
};

class Derived : public Base
{
    friend class SingletonFactory;

private:
    static Derived * GetInstance()
    {
    }

protected:
    Derived()
        : Base()
    {
    }
};

// (...)

Derived * d = SingletonFactory::GetInstance<Derived>();
于 2013-03-20T06:22:51.193 回答