首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++泛型编程中处理无效赋值

在C++泛型编程中处理无效赋值
EN

Stack Overflow用户
提问于 2017-12-28 01:51:18
回答 6查看 2.5K关注 0票数 31

我有包装任意lambda并返回lambda结果的C++代码。

代码语言:javascript
运行
复制
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,但我不希望barfn抛出异常时运行。有什么想法吗?

另外,我后来发现有个叫a proposal to fix this inconsistency的人。

EN

Stack Overflow用户

发布于 2017-12-28 02:04:48

这是一个非常笨拙且不可扩展的解决方案,但它非常简短,而且它支持RVO,这对于一些返回类型可能很重要:

代码语言:javascript
运行
复制
template <typename F>
auto wrapAndRun(F fn) -> decltype(F()) {
    // foo();
    char c;
    auto runner = std::unique_ptr<char, decltype(bar)>( &c, bar );
    try {
        return fn();
    }
    catch( ... ) {
        runner.release();
        throw;
    }
}
票数 0
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47996550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档