[問題] C++ template, the complete guide, ch 4.2
看板C_and_CPP (C/C++)作者softwind (software everywhere)時間16年前 (2010/04/12 01:04)推噓2(2推 0噓 3→)留言5則, 2人參與討論串1/1
Dear 版友,
我在閱讀 C++ template全覽 中文翻譯本時
對 ch 4.2 的一段敘述實在參透不了
4.2 nontype function template parameters
可以將 function template 定義成 nontype parameters
ex:
tempalte <typename T, int VAL>
T addValue(T const& x)
{
return x+VAL;
}
sample:
std::transform( source.begin(), source.end(),
dest.begin(),
addValue<int,5>); //實際操作
最後一個引數將function template addValue() 具現化....
問題在下一段:
注意上面例子會帶來一個問題: addValue<int,5> 是個function temlate實體(instance)
而我們知道所謂 function template實體 是被認為是命名一組重載函式集
即使該函式集內可能只有一個函式
根據目前標準 編譯器無法借助 "重載函式集" 來進行 template parameter的推導
因此 你不得不把 function template argument 強制轉型為精確型別
sample:
std::transform( source.begin(), source.end(),
dest.begin(),
(int(*)(int const *)) addValue<int,5>); //操作
---------------------------------------------------------------------------------
我的解讀是 addValue< T, int VAL> 是一堆function 集合
其中只有 addVlaue<int,5> 這一組 因為被使用到 所以有實體
但是 他的說法 "根據目前標準 編譯器無法借助..."
這邊我不懂是哪個部份需要推導???
不是只有一個實體嗎? compiler還能挑別組?
還有 "重載函式集" 是指哪個部份?? function overloading?
感謝回文
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.166.119.18
※ 編輯: softwind 來自: 118.166.119.18 (04/12 01:05)
→
04/12 01:20, , 1F
04/12 01:20, 1F
推
04/12 02:55, , 2F
04/12 02:55, 2F
推
04/12 02:58, , 3F
04/12 02:58, 3F
→
04/12 02:58, , 4F
04/12 02:58, 4F
→
04/12 02:59, , 5F
04/12 02:59, 5F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章