【问题标题】:C++0x: Range overloads for standard algorithms?C++0x:标准算法的范围重载?
【发布时间】:2010-10-08 06:39:50
【问题描述】:
std::sort(range(c));

相对

std::sort(c.begin(), c.end();

您希望下一个标准为标准算法提供范围重载吗?

Boost 的range iterators 是类似的东西,TC++PL3e 中提到的Bjarne Stroustrup 的iseq()s 也是同样的想法。我查看了the latest draft I could find,但没有看到提到范围重载。

【问题讨论】:

  • 编辑:我发现了这个:www-sop.inria.fr/geometrica/events/WG21_meeting_june_2008/Stroustrup_C++0x_overview.ppt(或 s/ppt$/pdf/)。这是 Stroustrup 于 2008 年 6 月在 WG21 会议上发表的演讲。在幻灯片 30 中,他提到了这些重载,但不清楚它们是否计划用于标准。

标签: c++ c++11


【解决方案1】:

History 页面提供了部分答案。

必须迫切需要向std 命名空间添加重载。请注意,这是一个库问题。您可以搜索档案以查找之前是否有人提出将这些添加到图书馆的请求。如果没有,您可以提交缺陷报告。当前的语言无论如何都不会阻止您编写自己的包装器。因此,问题归结为很多其他人是否也希望将其作为标准库支持的功能。但这还不是全部。任何扩展,甚至是图书馆的扩展,都不仅仅是一种技术选择,而且还受到许多其他地缘政治问题的指导。您必须获得一定数量的选票才能进入。

坦率地说,我很乐意看到它进入。但是,请记住,这绝不是图书馆离不开的小说/核心功能。所以,请保持你的手指交叉。

【讨论】:

  • 我认为可读和简洁的代码与清晰简洁的错误消息一样重要和重要,其中概念被投票(语言的变化!)。我认为范围将促进 STL 的使用。我希望 C++ 标准委员会的人也有同样的想法。
  • 在标准中强制执行单个重载并非易事:它涉及每个编译器供应商为其运行时、库提供补丁 --> 增加上市时间 --> 标准要么永远不会被接受,因为延迟或下一个版本已经准备好......你得到了漂移
【解决方案2】:

基于范围的 for 循环是我能找到的唯一使用范围概念的标准草案。对我来说,大多数标准算法都可以支持 Ranges 似乎很自然,但在您链接的标准草案中没有提到它。

【讨论】:

  • 第23章还有基于TR2中Range概念的迭代器。
猜你喜欢
  • 2011-07-28
  • 2011-11-06
  • 2017-03-30
  • 2010-10-04
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多