免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1375 | 回复: 1
打印 上一主题 下一主题

[C++] __VA_ARGS__可变参数宏是否有使用限定? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-20 21:17 |只看该作者 |倒序浏览
这个宏我没搞明白它到底是编译器实现还是怎么做的,找不到它定义的源码,而且貌似它是C语言的标准,不是C++的?

最近使用它的时候,遇到两个问题,第一个问题,看下面这个宏定义
#define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)
这是cocos2dx用来生成函数指针的宏,利用了std::bind和__VA_ARGS__来支持可变参数,但是我发现,当绑定函数的参数为const string&类型的时候(一般这种类型传参我们都是传递std::string.c_str()),__VA_ARGS__只能传递string对象进去,如果按一般传递方式都是传递std::string.c_str()进去,得到的就是空字符串。

其次就是当参数类型为object&,即某个对象的引用的时候,我用__VA_ARGS__把参数传进去,在函数内部改变了object的值,结果出来后一切都没有变化。不知道这是什么原因

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2015-10-21 08:21 |只看该作者
bind不应该绑定一个临时局部的对象

aaa.c_str() 传进去后,aaa析构了,那个bind对象中绑定的值当然就不对了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP