【问题标题】:Interpreting C++20 standard description of ITER_TRAITS解释 ITER_TRAITS 的 C++20 标准描述
【发布时间】:2023-03-30 22:47:01
【问题描述】:

谁能解释一下iterator.concepts.general#1 中的这一行在 C++ 标准草案中的含义:

对于类型I,如果iterator_­traits<I> 命名从主模板生成的特化,则让ITER_­TRAITS(I) 表示类型I。否则,ITER_­TRAITS(I) 表示iterator_­traits<I>

【问题讨论】:

  • Link 供参考。
  • 为方便读者,除此之外取自23.3.4.1/1 (N4861)。

标签: c++ language-lawyer c++20


【解决方案1】:

iterator_traits<I> 模板将填写I 对应成员中的value_typereference 等成员。如果您的迭代器类型没有这些成员(例如,所有指针类型),您可以专门化 std::iterator_traits<your_iterator_type> 来提供这些成员,并在特征类中提供它们。

ITER_TRAITS(I) 概念元函数代表了这一点。如果迭代器类型I 没有专门化iterator_traits,则它会从I 本身获取成员。如果它是专门的,那么它会从iterator_traits<I> 获取它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多