2016-11-09 84 views
2

我需要一個宏/模板函數,將包裝上的特定對象的一些方法的函數調用,即可變參數模板纏繞函數調用

​​

其中可以是任何類型的,以及銷燬和Destroy可以或可能不需要0到n個參數。在這個包裝內我需要做一些檢查。

我希望能夠調用該功能作爲包裝:

DESTROY_CHECK(a.Destroy(p1,p2,...)) 

DESTROY_CHECK(a, Destroy(p1,p2,...)) 

我怎樣才能做到這一點?

+0

你能發佈一個真實的使用示例嗎?我假設你不是要傳遞函數調用的文字省略號? –

+0

你可以使用C++ 11嗎? – 0x499602D2

+0

是的,我可以,我寧願使用宏的c + 11功能 – mezo

回答

0

你可以考慮variadic macro

#define identifier(parameters, ...) replacement-list 

...定義了不同的參數個數一個函數宏。可以使用__VA_ARGS__標識符訪問附加參數,然後將其替換爲參數,並提供要替換的標識符。

#define DESTROY_CHECK(x, ...) assert(x.Destroy(__VA_ARGS__)) 
相關問題