亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何顯式實例化模板函數?

如何顯式實例化模板函數?

C++
MM們 2019-10-08 11:08:02
我有一個帶有一個參數的模板函數。我必須實例化該函數而不調用該函數,這意味著我必須實例化。我有這個功能:template <class T> int function_name(T a) {}我實例化了這樣的功能:template int function_name<int>(int);但是我遇到了以下錯誤:error: expected primary-expression before 'template'error: expected `;' before 'template'
查看完整描述

3 回答

?
慕容3067478

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

注意模板后的尖括號!


查看完整回答
反對 回復 2019-10-08
?
Smart貓小萌

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是模板參數。


查看完整回答
反對 回復 2019-10-08
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

原始代碼看起來像那樣。但是由于推導了模板參數,它仍然有效。我必須同意安東尼·哈奇金斯(Antony Hatchkins)的觀點,該錯誤是由OP未引用的代碼引起的,但是我認為您的答案對于不了解顯式實例化的人還是有用的

查看完整回答
反對 回復 2019-10-08
  • 3 回答
  • 0 關注
  • 663 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號