【发布时间】:2018-03-07 23:46:34
【问题描述】:
我的类通常使用标准容器作为基础字段。例如,我有一个班级
template <typename T>
class Vec_3D
{
public:
/* ... */
std::array<T, 3> vec;
/* ... */
};
它只有一个变量vec,其余的只是我在处理向量时需要的函数。我希望能够使用基于范围的 for 循环,例如
Vec_3D<double> vec;
for (double val : vec) {/*...*/}
应该明显地迭代std::array<double, 3>。
如何在我的类中实现迭代器,而这些迭代器又应该调用 std::array<T, 3> 的迭代器?
我从this question 开始,并尝试将我的类中的迭代器定义为
typedef std::iterator<std::random_access_iterator_tag, T, ptrdiff_t, T*, T&> iterator;
typedef std::iterator<std::random_access_iterator_tag, const T, ptrdiff_t, const T*, const T&> const_iterator;
inline iterator begin() noexcept { return vec.begin(); }
inline const_iterator cbegin() const noexcept { return vec.cbegin(); }
inline iterator end() noexcept { return vec.end(); }
inline const_iterator cend() const noexcept { return vec.end(); }
但出现编译错误
error: no match for ‘operator!=’ (operand types are ‘Vec_3D<double>::iterator {aka std::iterator<std::random_access_iterator_tag, double, long int, double*, double&>}’ and ‘Vec_3D<double>::iterator {aka std::iterator<std::random_access_iterator_tag, double, long int, double*, double&>}’)
和operator++, operator*
【问题讨论】:
-
std::iterator不是你想的那样