首頁  >  文章  >  後端開發  >  為什麼我們不能部分推導類別模板的模板參數?

為什麼我們不能部分推導類別模板的模板參數?

Barbara Streisand
Barbara Streisand原創
2024-11-08 21:13:02258瀏覽

Why Can't We Partially Deduce Template Arguments for Class Templates?

類模板的部分模板參數推導:重新審視

儘管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 會被推導。本身就是一個有效類型:

tuple<int> t(42, "waldo", 2.0f);

為了避免這種歧義,必須為類別模板提供完整的模板參數集,而部分推導仍然是函數模板的選項。

以上是為什麼我們不能部分推導類別模板的模板參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn