【发布时间】:2018-10-30 19:20:01
【问题描述】:
假设你有一个班级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; };
错误 C2955:“A”:使用类模板需要模板参数 列表
当我想让它推断 A 是 A<int> 时。
我的问题是:这是一个固有的限制,还是我只是错过了一个可以使这种语法起作用的不同的演绎指南?
【问题讨论】:
-
clang给出的错误是
error: use of class template 'A' requires template arguments; argument deduction not allowed in lambda parameter。 -
您知道您可以只使用默认模板参数,对吧?
template <class T = int> -
@Brian 是的,这是一个 MCVE,用于解决我遇到的真正需要使用指南的问题
标签: c++ templates c++17 template-argument-deduction