最近我遇到了关于实现Singleton但是涉及抽象基类的问题.假设我们有这样的类层次结构:
class IFoo {...}; // it's ABC
class Foo : public IFoo {...};
Run Code Online (Sandbox Code Playgroud)
我们有单例类定义如下:
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;
};
Run Code Online (Sandbox Code Playgroud)
所以,如果我想使用如下:IFoo::Instance()->foo();我该怎么办?
如果我这样做:class IFoo : public Singleton<IFoo> {...};它将无法工作,因为Singleton将调用IFoo的ctor,但IFoo是一个ABC,因此无法创建.
而且:这个class Foo : public IFoo, public Singleton<Foo> {...};也行不通,因为这种类IFoo没有方法Instance()的接口,所以调用IFoo::Instance()会失败.
有任何想法吗?
Tim*_*sch 10
你想要使用类似的东西
IFoo my_foo = Singleton<Foo>::Instance();
my_foo->foo();
Run Code Online (Sandbox Code Playgroud)
基本上你必须使用具体的类(在这种情况下,你的类Foo)实例化模板Singleton,并且假设你的Foo派生自IFoo,你可以通过基指针引用它.您不能使用不完整或抽象类直接实例化模板.
| 归档时间: |
|
| 查看次数: |
16855 次 |
| 最近记录: |