我正在尝试构建一个嵌套的迭代器模板,并依赖于具有各种特征的迭代器,例如 value_type
.但事实证明,并非所有 STL 类型都返回具有这些特征的迭代器。例如:
#include <array>
#include <type_traits>
template <typename T>
using iterator_t = decltype(std::declval<T>().begin());
static_assert(std::is_same_v<iterator_t<std::array<int, 3>>, int*>);
此代码编译并显示数组迭代器的实际类型是
int*
.在这种情况下,我如何仍然访问诸如 value_type
之类的特征?等等?
最佳答案
该标准没有指定迭代器应该如何实现以及它应该是什么类型。实际上是像int*
这样的指针确实满足 std::array
的迭代器的要求,所以它的实现是非常合法的。
您可以使用 std::iterator_traits
获取 value_type
如 std::iterator_traits<iterator_t<std::array<int, 3>>>::value_type
,它也适用于指针。
关于c++ - 为什么 std::array::begin 不返回迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62020083/