c++ - Variadic 模板包装函数调用

标签 c++ templates variadic-templates variadic-macros

我需要一个宏/模板函数来包装特定对象上某些方法的函数调用,即

a.Destroy()

其中 a 可以是任何类型,Destroy 和 Destroy 可能有也可能没有 0 到 n 个参数。在这个包装器中,我需要做一些检查。

我希望能够将此函数作为包装器调用:

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

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

我怎样才能做到这一点?

最佳答案

可以考虑variadic macro :

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

... defines a function-like macro with variable number of arguments. The additional arguments can be accessed using __VA_ARGS__ identifier, which is then replaced with arguments, supplied with the identifier to be replaced.

#define DESTROY_CHECK(x, ...) assert(x.Destroy(__VA_ARGS__))

关于c++ - Variadic 模板包装函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40509694/

相关文章:

c++ - 有没有感觉 c++ 有时会减少解决问题的时间并增加句法、语义的严谨性?

c++ - CRTP:根据派生类内容启用基类中的方法

c++ - 两个具有相同大小的可变模板参数

c++ - 使用数据数组调用函数时的模板参数包扩展

c++ - 模板化类中的 typedef 类型名

c++ - 这似乎是 C++ Primer 5th edition 一书中的错误

c++ - 模板模板函数实例化

c++ - 设计嵌套模板类

c++ - 用于对可变数量的数组进行排序的可变参数模板

c++ - 抛物范围