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

yur*_*hek 3 c++ macros wrapper c++11

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

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

我想通过写一个宏来包装这件事MyMacro,这将完全一样ThirdPartyMacro,但扔MyExceptionThirdPartyMacro将抛出ThirdPartyException.

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

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

Dan*_*rey 6

一个lambda将有助于:

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