【问题标题】:Template argument deduction in function signature using guide使用指南的函数签名中的模板参数推导
【发布时间】: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”:使用类模板需要模板参数 列表

当我想让它推断 AA&lt;int&gt; 时。

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

【问题讨论】:

  • clang给出的错误是error: use of class template 'A' requires template arguments; argument deduction not allowed in lambda parameter
  • 您知道您可以只使用默认模板参数,对吧? template &lt;class T = int&gt;
  • @Brian 是的,这是一个 MCVE,用于解决我遇到的真正需要使用指南的问题

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


【解决方案1】:

语言不允许这样做。推导不会发生在函数签名中,因为没有什么可以推导的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 2018-07-17
    • 2019-06-01
    • 1970-01-01
    相关资源
    最近更新 更多