template<typename FirstArgT, typename...ArgsT>
class Server :public Server<ArgsT...> {
public:
Server(const function<void (FirstArgT, ArgsT...)>& func)
:Server<ArgsT...>([&](ArgsT args...) -> void { func(arg0, args...); }) { }
private:
FirstArgT arg0;
}
但是编译器说:
错误C3520'ArgsT':必须在此上下文中扩展参数包
错误C3546'...':没有可用于展开的参数包
第4行和第5行。
是否可以使用variadic参数作为lambda的参数是VS2015,还是有另一种方法可以做到这一点?
答案 0 :(得分:0)
我扩展并修复了你的代码以便编译它。如果您的下一个问题附带完整的示例,那将是很好的,这样我们就不需要扩展示例的其余部分;)
确实,我不知道你的代码对你有什么用处: - )
template<typename ...T> class Server;
template<typename FirstArgT, typename...ArgsT>
class Server<FirstArgT,ArgsT...> :public Server<ArgsT...> {
public:
Server(const std::function<void (FirstArgT, ArgsT...)>& func)
:Server<ArgsT...>([&](ArgsT ... args)-> void { func(arg0, args...); }) { }
private:
FirstArgT arg0;
};
template<typename FirstArgT>
class Server<FirstArgT>
{
public:
Server(const std::function<void (FirstArgT)>& func) {}
};
void Do( int, double) {}
int main()
{
Server<int,double> se( &Do );
}
如果您的目的只是在某处存储参数并使用存储的参数调用函数,只需使用std::bind
。
void Do( int i, double d) { std::cout << i << " " << d << std::endl; }
int main()
{
auto fx= std::bind( &Do, 1, 2.34);
fx();
// which works also for lambda:
auto fx2=
std::bind( []( int i,double d )->void
{ std::cout << i << " " << d << std::endl; }, 4, 5.6);
}