c++ - 抛出类似函数的可变参数宏包装,替换抛出的异常

标签 c++ c++11 macros wrapper

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

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

我想通过写一个宏来结束这个 MyMacro其行为与 ThirdPartyMacro 完全相同但抛出 MyException每当ThirdPartyMacro会抛出 ThirdPartyException .

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

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

最佳答案

lambda 会有所帮助:

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

关于c++ - 抛出类似函数的可变参数宏包装,替换抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19368823/

相关文章:

c++ - OpenMP 中调度程序处理循环变量

c++ - 为 RAII 包装 C 分配

c++ - C++传递参数时 "small object"的定义

c++ - 如果已经被互斥锁保护,我是否需要使用 atomic<>

macros - 从 http ://lisperati. planvita.com/actions.html 了解游戏 Action clojure 宏的嵌套引号

macros - 在编译期间使用自定义消息转到源代码?

c++ - 计算一组字符的出现次数并从字符串中减去空格

c++ - 性能差异:std::accumulate vs std::inner_product vs Loop

macros - 元谓词映射列表的测试目标扩展

c++ - 使用队列在 OpenCV 中保存平移和旋转矩阵