2012-03-26 98 views
-2

我在接口中聲明下面的模板方法:類方法模板參數列表

class IObjectFactory 
{ 
public: 
    virtual ~IObjectFactory() { } 

    virtual int32_t Init() = 0; 
    virtual bool Destroy() = 0; 
    virtual bool Start() = 0; 
    virtual bool Stop() = 0; 
    virtual bool isRunning() = 0; 
    virtual void Tick() = 0; 

    template <class T> 
    Object<T> CreateObject(T); 
}; 

我不知道該呼叫的樣子雖然。我認爲以下就足夠了,其中mObjFactory是前面提到的虛擬類的實現;

inline void AllocateWithMemPoolAux() { mObjFactory->CreateObject<TestClass1>(); } 

我得到的錯誤是「函數模板沒有實例相匹配的參數列表」 什麼正確的函數調用是什麼樣子?

(也 - 作爲一個旁註,是沒關係的接口中聲明的模板方法,並要求用戶實現它,你可以不聲明它虛擬?)

感謝

回答

1

通知:

template <class T> 
Object<T> CreateObject(T); 

你的意思

template <class T> 
Object<T> CreateObject(); 

0

您收到此錯誤,因爲您沒有將TestClass1的對象傳遞給此方法。

正確編譯代碼是這樣:

inline void AllocateWithMemPoolAux() 
{ 
    TestClass1 tObj; 
    mObjFactory->CreateObject<TestClass1>(tObj); 
} 

我假設你AllocateWithMemPoolAux()有更多的副作用比這裏所示;至少你需要用CreateObject函數的返回值做一些事情(改爲將對象引用到此函數中可能會更好)。

0

模板函數

template <class T> 
Object<T> CreateObject(T); 

需要T類型的一個參數。你沒有它就叫它。

0

你們稱方法不帶參數:

mObjFactory->CreateObject<TestClass1>(); 

你需要傳遞類型TestClass1的對象:

inline void AllocateWithMemPoolAux() { mObjFactory->CreateObject<TestClass1>(TestClass1()); }