我想專用模板類中的特定功能。C++模板:部分模板模板類中的功能專業化
如:
template<class T>
class A
{
public :
void fun1(T val);
void fun2(T val1, T val2);
};
template <class T>
void A<T>::fun1(T val)
{
// some task 1;
}
template <class T>
void A<T>::fun2(T val1, T val2)
{
// some task 2;
}
template <>
void A<char*>::fun2(char* val1, char* val2)
{
// some task 2 specific to char*;
}
當我做這樣的事情,我得到錯誤說的FUN2多個定義() 請讓我爲什麼這個錯誤的,也是正確的方式來實現這一點。
編譯和我[http://ideone.com/zTdcB](鏈接成功http://ideone.com/zTdcB)。 – ks1322
@ ks1322,那是因爲你沒有在ideone中涉及多個文件。您可以嘗試在.h文件中聲明此代碼,然後將其包含在2個.cpp文件中。你會得到鏈接錯誤。 – iammilind
@Rahul重定義錯誤(取決於編譯器)是由於這樣一個事實,即在你的完全專業化(又稱顯式專業化)中,你提供了一個模板參數char *,當這個參數在主模板初始化時被替換,那麼fun2已經decl/def和T將被替換char * –