什么类型的__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的?

__iter_concept<_Iter>是如何从random_access_iterator_tag派生的?

因为它被写为.__iter_concept不是一个概念;它是类型(或类型别名(。C++20指定了一组规则,用于从实现C++20concept化迭代器类别的有效迭代器中确定迭代器类型(前向、随机访问、输入等(。这些规则的名称被混淆地命名为";ITER_CONCEPT";。

单词";概念";这里表示它使用C++20概念规则进行此计算,而不是C++17概念前规则。

__detail::__iter_concept<T>是实现ITER_CONCEPT的GCC标准库中的模板元编程类型。因此得名。它生成一个继承自ITER_CONCEPT定义类型的类型,以便使用它的概念可以使用derived_from来检测迭代器类型。

___Capital开头的符号保留给c++编译器和std库,用于内部实现详细信息。(除非编译器明确允许,否则标准禁止在其他任何地方使用此类符号(。

因此,该模板是一些内部实现细节,用于实现该概念的C++标准要求。

__detail::__iter_concept<_Iter>

这是std库内部实现获取给定类型的标记的方法。它可能在std头中的其他地方被定义为C++代码。它是如何工作的,我会阅读源代码。或者更确切地说,我只是假设它言出必行。

最简单的方法就是使用标准iterator_traits

相关内容

  • 没有找到相关文章

最新更新