【发布时间】:2018-06-08 08:33:33
【问题描述】:
我有包装任意 lambda 并返回 lambda 结果的 C++ 代码。
template <typename F>
auto wrapAndRun(F fn) -> decltype(F()) {
// foo();
auto result = fn();
// bar();
return result;
}
除非F 返回void (error: variable has incomplete type 'void'),否则此方法有效。我曾想过使用ScopeGuard 运行bar,但如果fn 抛出,我不希望bar 运行。有什么想法吗?
【问题讨论】:
-
哪个版本的 C++,14 还是 17?
-
这是个人项目,所以c++2x也可以。
-
之前遇到过同样的问题,同样的解决方案适用。 stackoverflow.com/questions/24468397/… 虽然只是 C++11,但可能会被现代化。
-
你看过
std::invoke吗?看起来正是您需要的 -
@SemyonBurov
std::invoke将如何帮助我?
标签: c++