C ++范围TS包括实验路径

时间:2017-06-14 23:54:47

标签: c++ c++17 range-v3

我希望使用C ++ Ranges。 Working Draft, C++ Extensions for Ranges说:

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 algorithms, views, and actions for the Standard Library,其中说:

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/....

解释范围TS与#34;实验&#34;之间的差异。 &安培;没有它的范围V3。人们在哪里找到范围与&#34;实验/范围&#34;?有什么意义,重要吗?这应该是一个控制它的编译器选项吗?

2 个答案:

答案 0 :(得分:3)

Ranges TS是C ++技术规范。默认情况下,来自TS的任何库功能的任何标头都以“experimental”为前缀,这些标头包含的所有标题都包含在命名空间std::experimental中。

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

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

答案 1 :(得分:3)

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

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