c++ - Variadic 函数包装器无法使用 MSVC2017 进行编译

标签 c++ variadic-templates variadic-functions

我正在尝试使用 VS2017 编译以下内容:

template <typename R, typename ...Args>
struct Logger3<R(Args...)>
{
  std::function<R(Args...)> func;
  string name;

  Logger3(std::function<R(Args...)> func, const string& name)
    : func{func}, name{name}
  {
  }

  R operator() (Args ...args)
  {
    cout << "Entering " << name << endl;
    R result = func(args...);
    cout << "Exiting " << name << endl;
    return result;
  }
};

double add(double a, double b)
{
  cout << a << " + " << b << " = " << (a+b) << endl;
  return a+b;
}

template <typename R, typename... Args>
auto make_logger3(R (*func)(Args...), const string& name)
{
  return Logger3<R(Args...)>(
    std::function<R(Args...)>(func),
    name
  );
};

并且我在第一行收到了error C2988: unrecognizable template declaration/definition。我做错了什么?

最佳答案

你应该有 template <typename> struct Logger3;在您的特化之前。

关于c++ - Variadic 函数包装器无法使用 MSVC2017 进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46091384/

相关文章:

c++ - tellg() 和 seekg() 不能正常工作

c++ - 我的计算器有问题

c++ - Google Filament渲染引擎分割错误

c++ lambdas如何从上层范围捕获可变参数包

c++ - std::function 可以用来存储带有可变参数的函数吗

programming-languages - 是否有任何编程语言的函数的变量参数不在末尾?

C++ 初始化全局数组

c++ - std::conditional 的可变模板使用,其中一种类型是实例化失败

c++ - 一种特定类型的可变模板参数

c++ - 如何解压在 mixins 主机类中传递的一组元组(最终被转发给 mixins)