在C++中使用類模板幫助用戶創建類實例

在C++中使用類模板幫助用戶創建類實例

問題的產生

最近工作中使用C++遇到一個問題,我創建了一個管理線程的類ThreadCenter,這個類中包含一個存放Thread類指針的向量,而Thread是一個虛基類,我需要在ThreadCenter類中幫助用戶創建他們的派生類實例,以便確保管理的每個Thread實例都存放於堆內存中,可以安全delete掉。於是我自然而然的想到提供一個接口,讓用戶將他們的類作爲參數傳進來。在我接觸過的像Python,lua這樣的語言中,將類作爲參數傳遞是一件很自然的事兒,在C++中卻不行,怎麼辦。

使用類模板作爲實例工廠

在解決的過程中,我只能感嘆一句,C++果然麻煩。

問題終究是要解決的,我的方法是使用類模板作爲生成實例的工廠。實例工廠的代碼如下:

template<class T>
class ObjectFactory{
    public:
        static T* produce(){
            return new T;
        }
    private:
        ObjectFactory(){}
        ~ObjectFactory(){}
};

這裏將構造函數和析構函數放到private的原因是這個模板值用來創建其他類的實例,本身並不需要被實例化。

這樣,每次調用實例工廠類的produce()方法,就可以新建一個T類型的實例。比如我有一個類ThreadDerive,通過實例工廠產生實例,可以使用如下代碼:

typedef ObjectFactory<ThreadDerived> ThreadDerivedFactory;

Thread *pt = ThreadDerivedFactory::produce();

這樣,pt就指向了一個新生成的ThreadDerived類的實例。

發佈了51 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章