C ++包装变量参数宏

时间:2012-02-14 04:36:07

标签: c++ macros variadic-functions

我想做的例如:

#define macro(a) foo( _blah_, *(dword*)(&a) );
#define macro(a,b) foo( _blah_, *(dword*)(&a) , *(dword*)(&b) );
#define macro(a,b,c) foo( _blah_, *(dword*)(&a) , *(dword*)(&b) , *(dword*)(&c) );

但当然变量没有。论点。我基本上想要单独包装每个参数,而不是将所有参数作为一个__VA_ARGS__块传递。

1 个答案:

答案 0 :(得分:3)

与其他任何理智的人一样,我建议你删除宏,特别是使用C ++ 11的可变参数模板:

template<class T>
dword& make_dword(T& v){
  return *reinterpret_cast<dword*>(&v);
}

template<class... Args>
void bar(Args&... args){
  foo(_blah_, make_dword(args)...);
}

这应该可以解决问题。

我需要提一下,reinterpret_cast看起来很可疑,但是......