C++:“函式模板“中對“非型別引數”作偏特化時遇到的問題
阿新 • • 發佈:2018-10-31
在使用 “函式模板“對“非型別引數”作偏特化時遇到編譯報錯的問題,程式碼及報錯資訊如下
template<typename T, int size> void toStr() { cout << "1.---------------------" << endl; }; template<typename T> void toStr<T, 2>() { // error C2768: 'toStr': illegal use of explicit template arguments cout << "2.---------------------" << endl; }; template<> void toStr<int, 3>() { cout << "3.---------------------" << endl; }; int main() { toStr<int>(); toStr<int, 1>(); toStr<int, 3>(); return 0; }
報錯的原因是函式模板對偏特化缺少支援造成的,把經上程式碼改為使用類模板就沒有問題了:
template<typename T, int size = 0> struct X { static void toStr() { cout << "1.---------------------" <<endl; }; }; template<typename T> struct X<T, 1>{ static void toStr() { cout << "2.---------------------" << endl; }; }; template<> struct X<bool, 2> { static void toStr() { cout << "3.---------------------" << endl; }; };
參考文件