Variadic 函数包装器无法使用 MSVC2017 进行编译
Variadic functional wrapper doesn't compile with MSVC2017
我正在尝试使用 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;
在你的专业化之前。
我正在尝试使用 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;
在你的专业化之前。