3

假设我有一个第三方库,它提供了一个类似函数的ThirdPartyMacro宏:

  1. 可变参数并接受任意标记,而不仅仅是格式良好的 c++ 表达式。在解析参数后,ThirdPartyMacro 会提取一些标记,这些标记假定为标识符,表示其调用范围内的变量,并按原样使用它们。
  2. 评估为已知类型的某个值。
  3. 可能会抛出类型异常ThirdPartyException

我想通过编写一个MyMacro行为与ThirdPartyMacrothrowMyException完全相同ThirdPartyMacro的宏来结束这一点ThirdPartyException

可能吗?如果是这样,怎么做?

并不是因为 (1)MyMacro不能是函数,因为它的参数不是可以作为函数参数传递的东西。

4

1 回答 1

6

一个 lambda 将有助于:

#define MyMacro(...) \
   [&]{ try { return ThirdPartyMacro(__VA_ARGS__); } \
        catch( const ThirdPartyException& e ) \
        { throw MyException( e.what() ); } }()
于 2013-10-14T20:51:05.263 回答