作者softwind (software everywhere)
看板C_and_CPP
標題[問題] C++ template, the complete guide, ch 4.2
時間Mon Apr 12 01:04:50 2010
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)
→ james732:題外話 我覺得這本書真的不太好讀...>"< 有些句子很怪 04/12 01:20
推 holymars:std::transform是個function template.. 04/12 02:55
推 holymars:第三個模板參數(UnaryOperator)是要推導的 04/12 02:58
→ holymars:如果你給一個普通的 UnaryOperator,很好沒有問題 04/12 02:58
→ holymars:但是你給的是一個重載函式集 那就只好謝謝再聯絡.. 04/12 02:59