为了账号安全,请及时绑定邮箱和手机立即绑定

C++11 以std::function<void()> 做非类型模板的参数类型为什么会报错呢?

C++11 以std::function<void()> 做非类型模板的参数类型为什么会报错呢?

鸿蒙传说 2019-04-16 20:26:26
正在学习C++11的新特性,用非类型模板写了一个函数包装器,我是这样写的:#include#include#include#includevoidhello(){std::cout
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超7个赞

你的写法,templatei>,这里的i明显是一个变量,而不是类型,如果要声明类型应该写成template。不过如果声明为类型,wrapper当然就没法工作了,因为i()就相当于实例化一个空的std::function对象,并没有做任何事情,最终当然就不能得到你想要的效果。
一般来说,你应该这样实现wrapper才正常。
template
voidwrapper(Funcfunc){
func();
}
std::function最大的功能是表达匿名函数,特别是[]里面捕捉了当前上下文变量的匿名函数,结合着std::shared_ptr一起用,会有一种动态语言的错觉。
                            
查看完整回答
反对 回复 2019-04-16
  • 2 回答
  • 0 关注
  • 1371 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号