3 回答

TA貢獻1773條經驗 獲得超3個贊
請注意,由于代碼格式問題,原始問題中的代碼有些混亂。有關更多詳細信息,請參見AnthonyHatchkins的答案。
如果您確實要實例化該函數(而不是專門化某物),請執行以下操作:
template <typename T> void func(T param) {} // definition
template void func<int>(int param); // explicit instantiation.
[編輯]在顯式實例化和專門化方面似乎(很多)混亂。我上面發布的代碼涉及顯式實例化。專業化的語法不同。這是專門化的語法:
template <typename T> void func(T param) {} // definition
template <> void func<int>(int param) {} // specialization
注意模板后的尖括號!

TA貢獻1911條經驗 獲得超7個贊
您的代碼是正確的。
錯誤消息與您在此處未引用的代碼中的位置有關。
更新:
原代碼為
template <class T> int function_name(T a) {}
template int function_name<int>(int);
這是正確的。
但是它沒有被引用,因此看起來像這樣:
template int function_name(T a) {}
template int function_name(int);
它產生以下錯誤
a.cpp:1: error: explicit instantiation of non-template ‘int function_name’
a.cpp:1: error: expected `;' before ‘(’ token
a.cpp:3: error: ‘function_name’ is not a template function
這與OP所引用的明顯不同。
在此變體中,第二行可以(<int>此處可以省略),但是第一行有故障。編譯器無法猜測這T是模板參數。

TA貢獻1796條經驗 獲得超7個贊
原始代碼看起來像那樣。但是由于推導了模板參數,它仍然有效。我必須同意安東尼·哈奇金斯(Antony Hatchkins)的觀點,該錯誤是由OP未引用的代碼引起的,但是我認為您的答案對于不了解顯式實例化的人還是有用的
- 3 回答
- 0 關注
- 663 瀏覽
添加回答
舉報