最近我遇到了关于实现 Singleton 但涉及抽象基类的问题。
假设我们有这样的类层次结构:
class IFoo {...}; // it's ABC
class Foo : public IFoo {...};
我们的单例类定义如下:
template <typename T>
class Singleton
{
public:
static T* Instance() {
if (m_instance == NULL) {
m_instance = new T();
}
return m_instance;
}
private:
static T* m_instance;
};
所以如果我想使用如下:IFoo::Instance()->foo();
我应该怎么办?
如果我这样做:class IFoo : public Singleton<IFoo> {...};
它不会工作,因为 Singleton 将调用 IFoo 的 ctor,但 IFoo 是 ABC,因此无法创建。
和这个:class Foo : public IFoo, public Singleton<Foo> {...};
也不能工作,因为这样类 IFoo 没有方法 Instance() 的接口,所以调用IFoo::Instance()
将失败。
有任何想法吗?
你想要使用类似的东西
IFoo my_foo = Singleton<Foo>::Instance();
my_foo->foo();
基本上,您必须使用具体类(在本例中为类 Foo)实例化模板 Singleton,并且考虑到您的 Foo 派生自 IFoo,您可以通过基指针引用它。您不能使用不完整或抽象类直接实例化模板。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)