2016-11-09 31 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__))