使用指南在函数签名中推导模板参数

时间:2018-10-30 19:20:02

标签: c++ templates c++17 argument-deduction

假设您有一个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”:使用类模板需要模板参数   列表

当我想推论AA<int>时。

我的问题是:这是一个固有的限制,还是我只是错过了一个可以使这种语法起作用的不同的推导指南?

1 个答案:

答案 0 :(得分:3)

该语言不允许这样做。推论不会发生在函数签名中,因为没有任何推论。