C++0X 概念消失了。还应该使用哪些其他功能?

标签 c++ c++11 c++-concepts

您可能听说过,C++ 标准委员会的最后一次 session 投票决定从下一个 C++ 标准中删除概念。当然,这会影响其他功能,并且似乎会再次打开标准。如果是这样,您认为应该删除(或添加)哪些其他功能,为什么?

链接:

Removal of Concepts -- Danny Kalev(关于删除概念的决定)

Simplifying the use of Concepts -- Bjarne Stroustrup(关于现在看来的概念问题)

The Long Pole Gets Longer -- Martin Tasker(关于如果必须修复概念对 C++0x 进度的影响)

The C++0x "Remove Concepts" Decision - Stroustrup 谈 Dobbs 博士的问题

Trip Report: Exit Concepts, Final ISO C++ Draft in ~18 Months - 草本萨特

Concepts Get Voted Off The C++0x Island - Jeremy Siek 捍卫当前的概念规范

What Happened in Frankfurt? - Doug Gregor on C++Next(关于概念的历史和删除)。

最佳答案

Of course, this will affect other features and would seem to throw the standard wide open again.

几乎没有。他们仍然希望尽快完成标准,这是删除概念的主要原因之一。对不相关的更改“敞开大门”只会丢掉他们通过放弃概念而获得的一切。

无论如何.... 在剩余的 C++0x 附加项中,我想不出还有什么要删除的。我同意他们关于概念的决定。 Stroustrup 的论文确实概述了一些严重的问题,当前的概念规范无疑会简化模板错误消息,但这样做会大大降低泛型编程的实用性——我不愿意为此付出代价。

当我第一次阅读那篇论文时,我感到很害怕,因为我认为在对规范进行重大更改的过程中为时已晚。事实证明并非如此,委员会愿意采取戏剧性的行动。

但除此之外,我认为 C++0x 状况良好。其余的新功能看起来都很值得。

当然,我希望删除许多现有功能。主要是 vector<bool>特化。还有其他一些没有成功的流行特性示例(export 关键字、异常规范),但 vector 特化是其中唯一一个不可忽视的。只要我们不尝试导出模板,关键字是否存在(并且不是由编译器实现)都没有关系,我们可以避免使用异常规范,但是每次我们都需要一个 bool vector ,我们被当前标准中愚蠢的过早优化所困扰。

不幸的是,他们似乎已经放弃了删除它。 (最后我检查了一下,它甚至没有被弃用)。

当然,也可以抛弃很多旧的 C 垃圾,但最近,我发现我真正希望看到的一个变化是......抛弃iostreams 库。扔掉它,并基于泛型编程构建一个新的 STL 风格的 I/O 库。

当前 OOP 风格的 Iostreams 库丑陋、缓慢、过于复杂且不灵活。定义新流涉及太多巫术,涉及的标准流类型太少,灵 active 太低(让我意识到库有多么有限的问题是我需要从字符串中提取 float 。使用 stringstream 很容易做到,但是如果你需要经常这样做,你不想每次都复制输入字符串(就像 stringstream 一样)——在现有迭代器范围上工作的流在哪里?或者甚至是原始数组? )

扔掉 IO 流,开发一个现代替代品,C++ 将得到极大的改进。

也许还可以对字符串类做点什么。它现在的工作方式还不错,但实际上,大量的成员函数是怎么回事?作为自由函数,它们中的大多数会更好地工作,并且更通用。太多的标准库特别依赖于字符串类,原则上它可以与 any 容器甚至迭代器一起使用(std::getline,我在看你)

关于C++0X 概念消失了。还应该使用哪些其他功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1155389/

相关文章:

c++ - Variadic 模板基类调用转移

c++ - 如何让定时器在后台保持运行

C++多索引图实现

c++ - 在知道可调用参数之前如何约束惰性组合?

c++ - 导出需要 std 概念的模板函数

c++ - 四舍五入到最接近和更大的 float

c++ - 添加参数后“模板参数推导/替换失败”

c++ - 如何使用WinApi获取客户端窗口位置?

C++20 概念 : Element iterable concept

c++ - 处理多态对象集合的正确设计模式