首页 >后端开发 >C++ >为什么部分类模板参数推导仍然行不通?

为什么部分类模板参数推导仍然行不通?

DDD
DDD原创
2024-11-09 02:12:011059浏览

Why is Partial Class Template Argument Deduction Still Unworkable?

为什么部分类模板参数推导仍然难以捉摸

尽管P0091:类模板的模板参数推导提案旨在调整行为函数和类模板,类模板的部分推导仍然保留不可行。

考虑类模板:

template <std::size_t S, typename T>
struct test
{
    static constexpr auto size = S;
    using type_t = T;

    test(type_t (&amp;input)[size]) : data(input) {}
    type_t (&amp;data)[size]{};
};

使用辅助函数以方便使用时:

template <std::size_t S, typename T>
test<S, T> helper(T (&amp;input)[S]) { return input; }

代码如:

int buffer[5];

auto a = helper<5, int>(buffer); // No deduction
auto b = helper<5>(buffer);      // Type deduced: FAILS
auto c = helper(buffer);         // Type and size deduced

编译成功。然而,在较新的编译器版本中,部分推导(即 auto b = helper<5>(buffer);)失败,表明确实不支持部分类模板参数推导。

此限制源于担忧提出了以下情况下潜在的混乱:

// Deduced as tuple<int, string, float>
// but tuple<int> is also a valid type!
tuple<int> t(42, "waldo", 2.0f);

因此,虽然该提案最初旨在统一推导行为,但类模板的部分推导仍然存在由于潜在的歧义问题而无法使用。

以上是为什么部分类模板参数推导仍然行不通?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn