C ++, макрос переменных с переменным аргументом - PullRequest
1 голос
/ 14 февраля 2012

Я хочу сделать, например:

#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 Ответ

3 голосов
/ 14 февраля 2012

Как и любой другой здравомыслящий человек, я советую вам отбросить макросы, особенно с помощью шаблонов вариаций 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 выглядят довольно сомнительно, хотя ...

...