2010-10-28 123 views
3

我想從一個類中調用一個靜態方法,我將在運行時確定這個類,但是我知道它是給定類的子類。所以我們可以說我有這些類在C++中,我可以將類類型表示爲變量嗎?

class super { 
    public: 
    super(); 
    static super *loadMe (ifstream &is); 
} 

class subA : public super { 
    public: 
    subA(); 
    static super *loadMe (ifstream &is); 
} 

class subB : public super { 
    public: 
    static super *loadMe (ifstream &is); 
    private: 
    subB(); 
} 

而且我們說,我想在運行時確定(基於文件中的什麼)是否加載蘇巴或subB的未來。我能做到這一點的方法之一是使用空對象調用的方法

super getLoadType (ifstream &is) { if(complicatedFunctionOfIs(is)) return subA(); return subB()} 

super *newObj = getLoadType(is).loadMe(is); 

,但我做了subB的私人的無參數的構造函數,所以我不能在這裏這樣做。但是我並不需要一個超級對象,而只需要一個超級子類的類型。那麼有沒有辦法將它表示爲一個變量?編輯:我知道在這種情況下,我可以返回一個函數指針,但我正在考慮更復雜的例子,可能涉及需要調用多個靜態函數。

+2

聽起來像你想抽象工廠或類似的東西 – 2010-10-28 13:08:52

回答

9

你可能想看看Factory Pattern。如果你正在設計一個插件架構,你可以簡單地有一個函數返回一個指向所需工廠的指針。多態可以爲你做剩下的事。

+2

+1:工廠模式可能是這裏最好的選擇。 – Puppy 2010-10-28 13:14:08

相關問題