抛出函数式可变宏包装,替换抛出的异常

时间:2013-10-14 20:34:29

标签: c++ c++11 macros wrapper

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

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

    我想通过编写一个与MyMacro完全相同的宏ThirdPartyMacro来解决这个问题,但只要MyException抛出ThirdPartyMacro就抛出ThirdPartyException。< / p>

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

    不是因为(1)MyMacro不能成为函数,因为它的参数不能作为函数参数传递。

1 个答案:

答案 0 :(得分:6)

lambda会有所帮助:

#define MyMacro(...) \
   [&]{ try { return ThirdPartyMacro(__VA_ARGS__); } \
        catch( const ThirdPartyException& e ) \
        { throw MyException( e.what() ); } }()