[問題] C++ template, the complete guide, ch 4.2

看板C_and_CPP (C/C++)作者 (software everywhere)時間16年前 (2010/04/12 01:04), 編輯推噓2(203)
留言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
std::transform是個function template..
04/12 02:55, 2F

04/12 02:58, , 3F
第三個模板參數(UnaryOperator)是要推導的
04/12 02:58, 3F

04/12 02:58, , 4F
如果你給一個普通的 UnaryOperator,很好沒有問題
04/12 02:58, 4F

04/12 02:59, , 5F
但是你給的是一個重載函式集 那就只好謝謝再聯絡..
04/12 02:59, 5F
文章代碼(AID): #1BmW4r3p (C_and_CPP)
文章代碼(AID): #1BmW4r3p (C_and_CPP)