【问题标题】:Variadic template wrapping function call可变模板包装函数调用
【发布时间】:2016-11-09 14:46:10
【问题描述】:

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

a.Destroy()

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

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

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

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

我怎样才能做到这一点?

【问题讨论】:

  • 你能发一个真实的使用例子吗?我假设您的意思不是将文字省略号传递给函数调用?
  • 你会用 C++11 吗?
  • 可以,我更喜欢使用 c+11 功能而不是宏

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


【解决方案1】:

可以考虑variadic macro

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

... 定义了一个具有可变参数数量的类函数宏。可以使用__VA_ARGS__ 标识符访问其他参数,然后将其替换为参数,并提供要替换的标识符。

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

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    相关资源
    最近更新 更多