2012-02-14 95 views
1

我想例如做:C++包裝可變參數宏

#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__塊傳遞。

+3

難道我們確實需要時才被使用在當今世界的內聯函數和編譯器的宏功能通常可以優化比_any_人那並不好爲了生活而寫樂觀者? – paxdiablo 2012-02-14 04:38:36

+3

這看起來像是可能違反嚴格別名規則的事情。 – 2012-02-14 04:51:46

回答

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來看相當曖昧,雖然...