假设我有一个第三方库提供类似 ThirdPartyMacro
的函数宏即:
- 可变参数并接受任意标记,而不仅仅是格式正确的 C++ 表达式。在解析参数后,ThirdPartyMacro 提取一些标记,它假定这些标记是表示其调用范围内变量的标识符,并按原样使用它们。
- 计算出已知类型的某个值。
- 可能会抛出
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/