【问题标题】:Will there be standardization of scope guard/scope exit idioms?范围保护/范围退出习语是否会标准化?
【发布时间】:2015-05-22 20:20:07
【问题描述】:

在范围退出时运行 lambda 似乎是一件基本的事情,我希望它能够标准化。 unique_ptr 这样的东西在应用时会更好,但我发现需要无穷无尽的“一次性”析构函数,尤其是在利用 C 风格的库时。有谁知道这是否即将到来?

【问题讨论】:

  • 在哪些情况下,您在范围退出时使用 lambda?
  • 在关闭线程池之前等待线程池工作项完成是一个很好的例子(即使抛出异常,您仍然需要等待,否则会使工作人员崩溃)。总是可以为您所做的每一件事创建一个完整的 C++ 包装器,但是在您使用它的情况下,它会产生很多额外的代码。
  • 写一份提案?我碰巧喜欢Stefanus Du Toit 的实现(虽然我不知道他为什么叫它Auto
  • @Barry:这实际上是 Arthur O'Dwyer 的实现 - 请参阅 goo.gl/0t8bXR
  • @sdt 哎呀。我的阅读理解失败了。虽然关于Auto 的评论仍然存在:)

标签: c++ c++14 c++17 scopeguard


【解决方案1】:

n4189 提议在语言中添加make_scope_exit 包装器和其他类似的资源处理程序。它基于相对著名的scope_guard 谈话。

LWG 的最新“当前论文状态”是 2013 年,在上述日期之前。

C++1z(希望是 C++17)的内容还有待确定。

C++1z status for clang 没有提及。 C++1z TS for clang 没有提及。

论文本身包含一个示例实现。我不知道它遵循什么许可条款。

【讨论】:

【解决方案2】:

It would appear,当前版本的范围退出文件 P0052 将进入 Library Fundamentals v3,以便可能在 Post-C++17 标准中采用。

简而言之,C++17 不会发生。对不起。

【讨论】:

  • 最后的评论是关于将其移至 IS 的提议。不能说会不会发生。
  • @pepper_chico 什么是?
  • @Jens:国际标准。顺便说一句,它没有成功。
猜你喜欢
  • 2015-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2011-01-06
  • 1970-01-01
  • 2016-08-07
相关资源
最近更新 更多