C++ 中的单例和抽象基类

2024-05-12

最近我遇到了关于实现 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(使用前将#替换为@)

C++ 中的单例和抽象基类 的相关文章

随机推荐