如何使用可变参数的lambda从可变模板类
How to use variadic parameter in lambda from variadic template class
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行
是否可以使用可变参数作为lambda的参数是VS2015,或者有另一种方法来做到这一点?
我扩展并修复了您的代码以使其编译。如果你的下一个问题有完整的例子,那就太好了,这样我们就不需要扩展示例的其余部分;)
确实,我不知道你的代码是什么好:-)
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);
}
相关文章:
- 我应该使用什么来代替void作为变体中的替代类型之一
- 在不传递参数数量且只有3个点的情况下,如何使用变差函数
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 使用变量值作为 PlaySound 中的路径
- 如何使用可变参数模板强制转换每个变体类型
- 你如何使std::变体的使用更"palatable",语法方面?
- 如何链接 DLL 以供 LoadLibrary() 使用(在 Windows 上的 C++ 中)并从调用 exe 导入变
- 如何使用 IRBuilder 更新 LLVM IR 中的全局变量值?
- 使用自定义访问者时具有自定义类型的提升变体失败(源自 boost::static_visitor)
- 在 Xcode 中使用后对外部变量值进行初始化
- 在函数名称中使用变量值
- 在 Bison 和 Flex 中使用变体
- 如何使用变体创建几何图形
- C 宏使用变量值
- 使用变分模板的困难
- 使用提升分配使用变量值初始化类似 JSON 的映射
- C++我可以使用变量值作为Struct名称来声明Struct吗
- 重复使用变元函数参数不会;不起作用
- 如何不总是计算可能不使用的参数值
- 是什么让指针的使用变得不可预测