2013-03-20 62 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>();