我有一個類MyClass,它是以typename T爲模板的。但是在裏面,我想要一個模板化在另一個類型TT上的方法(它與T)。T上的模板化方法:這是可能的/正確的
讀/修修補補後,我發現下面的符號:
template <typename T>
class MyClass
{
public :
template<typename TT>
void MyMethod(const TT & param) ;
} ;
文體上(我喜歡有一個頭文件我的模板類的聲明,而在另一頭文件中的方法定義),我不會在類聲明中定義方法。所以,我必須把它寫成:
template <typename T> // this is the type of the class
template <typename TT> // this is the type of the method
void MyClass<T>::MyMethod(const TT & param)
{
// etc.
}
我知道我必須爲「聲明」中的方法使用的typenames,但不知道究竟怎麼了,並通過試驗和錯誤發現。
上面的代碼在Visual C++ 2008上編譯,但是:這是在T上模板化類的模板上有一個方法模板的正確方法嗎?
作爲獎勵:這類代碼背後是否存在隱藏的問題/意外/約束? (我想專業化可以寫得很有趣)
至於專業化:你不能專門化一個成員函數沒有明確地專門化包含類:http://stackoverflow.com/questions/2097811/c-syntax-for-explicit-specialization-of-a-template-功能-IN-A-模板類/ 2114807 – 2010-04-28 22:59:37