使用指南在函数签名中推导模板参数
Template argument deduction in function signature using guide
假设你有一个 class A
(C++17):
template<class T>
struct A
{
A() = default;
A(T t) : val(t)
{
}
A operator*(A a)
{
return A(a.val * this->val);
}
T val;
};
然而,99% 的时间 A
的值类型将是 int
,因此您使用推导指南来减少冗长:
A()->A<int>;
太好了,现在您可以在没有模板列表的情况下定义变量了:
A myVar;
我遇到的问题是它似乎在涉及函数签名时出现故障,例如以下需要使用模板参数列表:
auto ASquared = [](A a, A b) { return a * b; };
error C2955: 'A': use of class template requires template argument
list
当我想让它推断出 A
是 A<int>
。
我的问题是:这是一个固有的限制,还是我只是缺少可以使此语法起作用的不同推导指南?
语言不允许这样做。演绎不会发生在函数签名中,因为没有什么可以演绎的。
假设你有一个 class A
(C++17):
template<class T>
struct A
{
A() = default;
A(T t) : val(t)
{
}
A operator*(A a)
{
return A(a.val * this->val);
}
T val;
};
然而,99% 的时间 A
的值类型将是 int
,因此您使用推导指南来减少冗长:
A()->A<int>;
太好了,现在您可以在没有模板列表的情况下定义变量了:
A myVar;
我遇到的问题是它似乎在涉及函数签名时出现故障,例如以下需要使用模板参数列表:
auto ASquared = [](A a, A b) { return a * b; };
error C2955: 'A': use of class template requires template argument list
当我想让它推断出 A
是 A<int>
。
我的问题是:这是一个固有的限制,还是我只是缺少可以使此语法起作用的不同推导指南?
语言不允许这样做。演绎不会发生在函数签名中,因为没有什么可以演绎的。