首页 >后端开发 >C++ >为什么从类模板中删除部分演绎?

为什么从类模板中删除部分演绎?

Susan Sarandon
Susan Sarandon原创
2024-11-11 13:55:031025浏览

Why Was Partial Deduction Removed from Class Templates?

类模板的推导

类模板的模板参数推导旨在简化函数模板和类模板之间的行为。然而,该提案最初包含部分推导,其中仅显式指定参数的子集。

部分推导问题

Botond Ballo 提出的问题凸显了潜在的可能性部分演绎可能导致含糊解释的情况下的混乱。例如:

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

在这种情况下,如果允许部分扣除,则预期扣除将为 tuple。然而,tuple也是有效类型,从而产生歧义。

当前行为

由于这些问题,从提案中删除了类模板的部分扣除。目前,推导只能应用于所有模板参数或不应用于任何模板参数。

示例

考虑以下类模板:

template <std::size_t S, typename T>
struct test
{
    test(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; }

在给定的code:

int buffer[5];

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

仅允许完全推导,如尝试仅推导类型时的错误所示:

auto b = helper<5>(buffer);      // Type deduced: FAILS.

以上是为什么从类模板中删除部分演绎?的详细内容。更多信息请关注PHP中文网其他相关文章!

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