什么类型的 __iter_concept<_Iter>
What type of __iter_concept<_Iter>
我看过 std::random_access_iterator
和其他迭代器概念
这就是 GCC 实现的样子
template<typename _Iter>
concept random_access_iterator = bidirectional_iterator<_Iter>
&& derived_from<__detail::__iter_concept<_Iter>,
random_access_iterator_tag>
&& totally_ordered<_Iter> && sized_sentinel_for<_Iter, _Iter>
&& requires(_Iter __i, const _Iter __j,
const iter_difference_t<_Iter> __n)
{
{ __i += __n } -> same_as<_Iter&>;
{ __j + __n } -> same_as<_Iter>;
{ __n + __j } -> same_as<_Iter>;
{ __i -= __n } -> same_as<_Iter&>;
{ __j - __n } -> same_as<_Iter>;
{ __j[__n] } -> same_as<iter_reference_t<_Iter>>;
};
__iter_concept<_Iter>
是如何导出 from random_access_iterator_tag
的?
How is it that __iter_concept<_Iter>
, derived from random_access_iterator_tag
?
因为它是这样写的。 __iter_concept
不是一个概念;它是 type(或类型别名)。 C++20 指定了一组规则,用于从实现 C++20 concept
化迭代器类别的有效迭代器中确定迭代器类别(前向、随机访问、输入等)。这些规则的名称容易混淆地命名为“ITER_CONCEPT”。
此处的“概念”一词表示它使用 C++20 概念规则进行此计算,而不是 C++17 预概念规则。
__detail::__iter_concept<T>
是 GCC 标准库中实现 ITER_CONCEPT 的模板元编程类型。由此得名。它生成一个继承自 ITER_CONCEPT 定义类型的类型,因此使用它的概念可以使用 derived_from
来检测迭代器类型。
以 __
或 _Capital
开头的符号保留供您的 C++ 编译器和标准库用于内部实现细节。 (标准禁止在其他任何地方使用此类符号,除非您的编译器明确允许)。
因此该模板是一些内部实现细节,用于实现该概念的 C++ 标准要求。
__detail::__iter_concept<_Iter>
这是 std 库内部实现获取给定类型标记的方法。它可能在 std headers 的其他地方定义为 C++ 代码。它是如何工作的,我会阅读源代码。或者更确切地说,我只是假设它按照它说的去做。
天真的方法就是使用 std iterator_traits
.
我看过 std::random_access_iterator
和其他迭代器概念
这就是 GCC 实现的样子
template<typename _Iter>
concept random_access_iterator = bidirectional_iterator<_Iter>
&& derived_from<__detail::__iter_concept<_Iter>,
random_access_iterator_tag>
&& totally_ordered<_Iter> && sized_sentinel_for<_Iter, _Iter>
&& requires(_Iter __i, const _Iter __j,
const iter_difference_t<_Iter> __n)
{
{ __i += __n } -> same_as<_Iter&>;
{ __j + __n } -> same_as<_Iter>;
{ __n + __j } -> same_as<_Iter>;
{ __i -= __n } -> same_as<_Iter&>;
{ __j - __n } -> same_as<_Iter>;
{ __j[__n] } -> same_as<iter_reference_t<_Iter>>;
};
__iter_concept<_Iter>
是如何导出 from random_access_iterator_tag
的?
How is it that
__iter_concept<_Iter>
, derived fromrandom_access_iterator_tag
?
因为它是这样写的。 __iter_concept
不是一个概念;它是 type(或类型别名)。 C++20 指定了一组规则,用于从实现 C++20 concept
化迭代器类别的有效迭代器中确定迭代器类别(前向、随机访问、输入等)。这些规则的名称容易混淆地命名为“ITER_CONCEPT”。
此处的“概念”一词表示它使用 C++20 概念规则进行此计算,而不是 C++17 预概念规则。
__detail::__iter_concept<T>
是 GCC 标准库中实现 ITER_CONCEPT 的模板元编程类型。由此得名。它生成一个继承自 ITER_CONCEPT 定义类型的类型,因此使用它的概念可以使用 derived_from
来检测迭代器类型。
以 __
或 _Capital
开头的符号保留供您的 C++ 编译器和标准库用于内部实现细节。 (标准禁止在其他任何地方使用此类符号,除非您的编译器明确允许)。
因此该模板是一些内部实现细节,用于实现该概念的 C++ 标准要求。
__detail::__iter_concept<_Iter>
这是 std 库内部实现获取给定类型标记的方法。它可能在 std headers 的其他地方定义为 C++ 代码。它是如何工作的,我会阅读源代码。或者更确切地说,我只是假设它按照它说的去做。
天真的方法就是使用 std iterator_traits
.