假设您有一个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;
};
但是,A
的值类型将有99%的时间成为int
,因此您可以使用推论指南来减少冗长程度:
A()->A<int>;
这很酷,现在您可以定义没有模板列表的变量:
A myVar;
我遇到的问题是,在函数签名方面,它似乎崩溃了,例如以下内容需要使用模板参数列表:
auto ASquared = [](A a, A b) { return a * b; };
错误C2955:“ A”:使用类模板需要模板参数 列表
当我想推论A
为A<int>
时。
我的问题是:这是一个固有的限制,还是我只是错过了一个可以使这种语法起作用的不同的推导指南?
答案 0 :(得分:3)
该语言不允许这样做。推论不会发生在函数签名中,因为没有任何推论。