2013-03-20 67 views
1

我怎样才能返回对象或调用派生类的,其基础是单派生类,其基地返回objec是单身

+1

尽管有黑客/破解它可以实现。更好地改变设计,因为这个要求看起来不自然。 – iammilind 2013-03-20 06:14:14

+0

我同意@iammilind - 是否需要这样的事情? – 2013-03-20 06:23:57

回答

1

你将不得不使用虚拟静态方法,它是不是在C支持++(这是某个getInstance在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>();