我正在尝试编写一个矩阵类,其中begin()
和end()
成员函数用于迭代矩阵的行。为了获得良好的内存占用,我决定保留三个成员变量:
std::unique_ptr<T[]>
的数据向量,其中T
是我的矩阵类的模板参数。 我想与STL算法很好地互操作,因此我希望我的迭代器继承自
namespace std {
template<
class Category,
class T,
class Distance = std::ptrdiff_t,
class Pointer = T*,
class Reference = T&>
struct iterator;
}
这个基类std::iterator<...>
有几个模板参数,其默认参数并不适合我的情况。这些行不是我的矩阵的元素,但我需要指定Reference
类型,该类型用于引用矩阵中的行。 Pointer
类型相同。
我该如何解决这个问题? std::iterator<...>
模板类的模板参数需要满足哪些要求?
到目前为止我的努力:我实现了一个名为RowView
的模板类,然后将其作为Reference
的类型,即使它不是引用类型。我想,这可能有用,因为std::vector<bool>
做了类似的事情。但是由于this reference没有详细说明要求,我想,在制造大的设计错误之前,我最好先问一下。 My source code can be found on github.相关课程是模板专精template <typename T> class Mat<T,0,0>
。