類模板的部分模板參數推導:重新審視
儘管P0091 中概述了統一函數和類模板行為的努力,但類模板中的部分參數推導仍然難以捉摸。本討論闡明了當前的限制並探討了背後的潛在原因。
考慮類別模板測試及其輔助函數 helper。雖然 helper 允許部分推導,如提供的程式碼所示,但相應的類別模板測試不允許。
template<std::size_t S, typename T> struct test { static constexpr auto size = S; using type_t = T; test(type_t(&&input)[size]) : data(input) {} type_t(&&data)[size]{}; };
template<std::size_t S, typename T> test<S, T> helper(T(&&input)[S]) { return input; }
經過實驗,很明顯,類模板推導僅在所有參數都顯式時才會發生假如。這種與預期行為的偏差引發了對 P0091 的解釋是否有誤解的問題。
正如 Botond Ballo 的旅行報告所暗示的那樣,提出了對類模板的部分扣除,但由於擔心混淆,後來又撤回了。例如,以下程式碼將導致對 tuple
tuple<int> t(42, "waldo", 2.0f);
為了避免這種歧義,必須為類別模板提供完整的模板參數集,而部分推導仍然是函數模板的選項。
以上是為什麼我們不能部分推導類別模板的模板參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!