在va_arg 中使用template 的问题
今天写了一个模板类,其中用到了va函数(可变参数函数)。
在调用 va_arg时编译出错了,
那句话是这样写的:
value = va_arg( parms , template * );
编译的时候报出error: `va_arg' was not declared in this scope。
这个错误报的很奇怪,我已经添加了#include
并且在以前(value = va_arg( parms , template * );)还好好的,就是刚才把 template添加了一个参数啊。
后来发现是因为va_arg是一个宏,她定义在/usr/lib/gcc/i386-redhat-linux//include/stdarg.h中,在宏展开是把"template"中的逗号当成宏参数分隔符了,这样在编译器看来va_arg就有3个参数,和头文件中的宏定义参数个数不符合,所以报出了`va_arg'没有定义。
解决方法:
typedef template * temp_ptr;
//也可以用#define temp_ptr template *
//因为在外层宏(va_arg)展开时,自己定义的这个内层宏还没有展开,
//所以不会出现刚才上面那个问题。
value = va_arg( parms , temp_ptr );
搞定。哎,宏啊宏
阅读(1040) | 评论(0) | 转发(0) |