0

我正在寻找使用 C++ 范围。工作草案,范围的 C++ 扩展说:

The Ranges library provides the Ranges library headers, shown in Table 2.

Table 2 — Ranges TS library headers

<experimental/ranges/algorithm>   <experimental/ranges/random>
<experimental/ranges/concepts>    <experimental/ranges/tuple>
<experimental/ranges/functional>  <experimental/ranges/utility>
<experimental/ranges/iterator>

我发现最接近的是Range-v3 - 标准库的范围算法、视图和操作,它说:

Range library for C++11/14/17. This code is the basis of a formal proposal to add range support to the C++ standard library.

This library is header-only. You can get the source code from the range-v3 repository on github. To compile with Range-v3, you can either #include the entire library:
#include <range/v3/all.hpp>

Or you can #include only the core, and then the individual headers you want:
#include <range/v3/core.hpp>
#include <range/v3/....

解释带有“实验性”的 Ranges TS 和没有它的 Range V3 之间的差异。在哪里可以找到带有“实验/范围”的范围?有什么意义,重要吗?这应该是控制它的编译器选项吗?

4

2 回答 2

4

Ranges TS 是 C++ 技术规范。默认情况下,来自 TS 的任何库功能的任何标头都以“experimental”为前缀,并且这些标头包含的任何内容都会进入命名空间std::experimental

Range-v3 是一个 C++,它实现了与范围有关的各种功能。但它不做的是实现 Ranges TS 本身。也就是说,它不是 TS 的正式实现。因此,它可以将其标题放在任何它喜欢的地方;它不受 TS 规则的约束。

如果编译器实现了 Ranges TS,那么您可以在文档中查看需要哪些编译器开关才能访问它(如果有)。由于 Ranges TS 是针对 Concepts TS 编写的,因此您可能至少需要激活它。如果您下载独立的 Ranges TS 实现,那么文档将(希望)告诉您如何使用它。

于 2017-06-15T00:37:11.280 回答
3

Range-v3 早于 Ranges TS,TS 中的功能基于 range-v3 的功能(并且是其子集)。Ranges TS 需要一个支持 Concepts TS 的编译器;range-v3 没有,因此 range-v3 不可能成为 TS 实现。

如果您正在寻找 Ranges TS 的参考实现,请在 GitHub 上找到 cmcstl2 项目。

于 2017-06-15T01:17:29.560 回答