gpt4 book ai didi

c++ - 如何用 try/catch block 包装调用?

转载 作者:太空狗 更新时间:2023-10-29 20:02:28 24 4
gpt4 key购买 nike

假设,我有不同的函数,可以抛出异常:

const Foo& func_foo(...);  // Can throw exceptions
const Bar& func_bar(...); // Can throw exceptions
const FooBar& func_foobar(...); // Can throw exceptions

我在代码中有不同的地方,可以通过以下方式使用这些功能:

some_func(/*applying of func_foo or func_bar or func_foobar*/(...)) 

实际上,我在不同函数的许多地方立即使用函数的结果。

用 try/catch block 包装 func_foo/func_bar_func_foobar 函数调用而不全局重写其他代码段的最佳方法是什么?

理想情况下我想使用类似的东西(例如调用 func_foo)

some_func(TRY_CATCH_BLOCK(func_foo(...)));

捕获处理程序将传播不同类型的异常

catch (const ExceptionFoo& e)
{
throw SomeException1("Some message from e");
}
catch (const ExceptionBar& e)
{
throw SomeException2("Some message from e");
}

最佳答案

我必须承认,我发现结合使用 lambda 和宏非常有趣。

#define TRY_CATCH_BLOCK(...)         \
[&]() -> decltype(auto) { \
try { \
return __VA_ARGS__; \
} catch(/* ... */) { \
/* Handle and rethrow */ \
} \
}()

这可以像您指定的那样调用,包括在另一个函数调用中交错。

some_func(TRY_CATCH_BLOCK(func_foo(...)));

See it live on Coliru

关于c++ - 如何用 try/catch block 包装调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40487123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com