看板 C_and_CPP 關於我們 聯絡資訊
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