类模板的推导
类模板的模板参数推导旨在简化函数模板和类模板之间的行为。然而,该提案最初包含部分推导,其中仅显式指定参数的子集。
部分推导问题
Botond Ballo 提出的问题凸显了潜在的可能性部分演绎可能导致含糊解释的情况下的混乱。例如:
tuple<int> t(42, "waldo", 2.0f);
在这种情况下,如果允许部分扣除,则预期扣除将为 tuple
当前行为
由于这些问题,从提案中删除了类模板的部分扣除。目前,推导只能应用于所有模板参数或不应用于任何模板参数。
示例
考虑以下类模板:
template <std::size_t S, typename T> struct test { test(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; }
在给定的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中文网其他相关文章!