如何返回对象或调用基类为单例的派生类的 getInstance
问问题
68 次
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 回答