首页  >  文章  >  后端开发  >  为什么我们不能部分推导类模板的模板参数?

为什么我们不能部分推导类模板的模板参数?

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