简体   繁体   English

可变参数模板错误 function:候选人期望 0 arguments,提供 3

[英]Error with variadic templates function: candidate expects 0 arguments, 3 provided

I'm trying to write a static variadic templates constructor for my class. But I'm not so experienced in variadic templates and get an error.我正在尝试为我的 class 编写一个 static 可变参数模板构造函数。但我在可变参数模板方面不是很有经验,因此出现错误。

I wrote the following code:我写了以下代码:

template <typename T> struct scalar {

template <typename... Args> static std::shared_ptr<scalar<T>> create(Args &&...args) {
    return std::make_shared<scalar<T>>((std::forward<Args>(args))...);
  }

};


template <typename T>
std::shared_ptr<scalar<T>> operator+(std::shared_ptr<scalar<T>> &lhs,
                                     std::shared_ptr<scalar<T>> &rhs) {
  auto res = scalar<T>::create(lhs->data + rhs->data, {lhs, rhs}, "+");
  res->backward = [lhs, rhs, res]() {
    lhs->grad += res->grad;
    rhs->grad += res->grad;
  };
  return res;
}

and I got that error:我得到了那个错误:

error: no matching function for call to ‘red_engine::scalar<double>::create(red_engine::scalar<double>::value_type, <brace-enclosed initializer list>, const char [2])’
  143 |   auto res = scalar<T>::create(lhs->data * rhs->data, {lhs, rhs}, "*");
      |              ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/alex/projects/AI/nanograd/nanograd-cpp/engine.hpp:36:46: note: candidate: ‘static red_engine::scalar<T>::pointer red_engine::scalar<T>::create(Args&& ...) [with Args = {}; T = double; pointer = std::shared_ptr<red_engine::scalar<double> >]’
   36 |   template <typename... Args> static pointer create(Args &&...args) {
      |                                              ^~~~~~
/home/alex/projects/AI/nanograd/nanograd-cpp/engine.hpp:36:46: note:   candidate expects 0 arguments, 3 provided

Can someone explain me what am I doing wrong?有人可以解释我做错了什么吗? Thank you in advance!先感谢您!

{lhs, rhs} doesn't have a type, so the respective type in Args... can't be deduced, and it seems to make the compiler assume Args is empty, hence candidate expects 0 arguments . {lhs, rhs}没有类型,因此无法推断出Args...中的相应类型,并且它似乎使编译器假定Args为空,因此candidate expects 0 arguments

Use something that does have a type, like MyClass{lhs, rhs} or MyClass(lhs, rhs) .使用确实具有类型的内容,例如MyClass{lhs, rhs}MyClass(lhs, rhs)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 候选人需要6个参数,提供0个 - Candidate expects 6 arguments, 0 provided 调用没有匹配函数 - 候选者需要0个参数,6提供 - No matching function for call to - candidate expects 0 arguments, 6 provided 可变参数模板:候选人期望1个参数,提供0个(推导错误) - Variadic template: candidate expects 1 argument, 0 provided (deduction error) 候选人需要 6 个参数,提供 2 个(合并排序向量) - Candidate expects 6 arguments, 2 provided (merging sorted vectors) std :: map插入,候选人期望2个参数,提供1个 - std::map insert, candidate expects 2 arguments, 1 provided 没有用于呼叫的匹配功能/候选人期望1个参数,提供0个 - No matching function for call / Candidate expects 1 argument, 0 provided variadic templates与类中相同数量的函数参数 - variadic templates same number of function arguments as in class C++ 函数:不带参数的可变参数模板 - C++ function : Variadic templates with no arguments c++ 处理包含向量的类时 - 候选人需要 2 个参数,提供 0 - c++ when working with class containing vectors - candidate expects 2 arguments, 0 provided 错误:候选构造函数不可行:需要 5 arguments,但提供了 0 - Error: candidate constructor not viable: requires 5 arguments, but 0 were provided
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM