Chinaunix

标题: __VA_ARGS__可变参数宏是否有使用限定? [打印本页]

作者: abcbuzhiming    时间: 2015-10-20 21:17
标题: __VA_ARGS__可变参数宏是否有使用限定?
这个宏我没搞明白它到底是编译器实现还是怎么做的,找不到它定义的源码,而且貌似它是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的值,结果出来后一切都没有变化。不知道这是什么原因
作者: bruceteen    时间: 2015-10-21 08:21
bind不应该绑定一个临时局部的对象

aaa.c_str() 传进去后,aaa析构了,那个bind对象中绑定的值当然就不对了





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2