2012-06-09 78 views
2

我有一個模板類,我正在創建自定義對象。它看起來有點像這樣。將const引用傳遞給使用自定義對象的模板類

template<typename T1,typename T2> 
class myClass 
{ 
public: 
    myClass(const T1 &param1, const T2 &param2); 
} 



template<typename T1, typename T2> 
myClass<T1,T2>:: 
myClass 
(const T1 &param1, const T2 &param2) 
{ 
    T1.customFunction(); //doesn't compile 
} 

因此,我希望這個隨時模板類是用來誰使用它是負責確保該組別爲T1有一個名爲customFunction功能的人()。足夠公平的問題是,customFunction在編譯時必須保證是const,因爲它在一個常量參數(param1)上被調用,但如果T1本質上是一個虛擬類,怎麼可能這樣呢?

回答

0

您已將它稍微關閉:不是函數在編譯時必須爲「const」,但必須知道傳遞的類型。它不編譯的原因是因爲您嘗試在類型T1上調用customFunction而不是其實例。

template<typename T1, typename T2> 
myClass<T1,T2>:: 
myClass 
(const T1 &param1, const T2 &param2) 
{ 
     param1.customFunction(); //does compile 
}; 
1

首先,它應該是

param1.customFunction(); 

,因爲你與參數對象,而不是類型的呼叫。

其次,你不必擔心。每當構造一個myClass對象時,編譯器都會檢查傳遞的參數是成員函數存在和可調用的類型。

相關問題