Witajcie.
Stworzyłem prosty iterator:
template <typename T, size_t ROW, size_t COL>
struct matrix_iterator
{
using iterator_type = typename array<array<T, COL>, ROW>::iterator;
iterator_type it;
matrix_iterator(iterator_type iter)
: it(iter)
{
}
matrix_iterator(const matrix_iterator&) = default;
matrix_iterator& operator =(const matrix_iterator&) = default;
matrix_iterator(matrix_iterator&&) = default;
matrix_iterator& operator =(matrix_iterator&&) = default;
matrix_iterator& operator++()
{
++it;
return *this;
}
matrix_iterator& operator--()
{
--it;
return *this;
}
matrix_iterator operator++(int) {
auto copy = *this;
++it;
return copy;
}
matrix_iterator operator--(int) {
auto copy = *this;
--it;
return copy;
}
bool operator !=(const matrix_iterator& o) const
{
return it != o.it;
}
bool operator ==(const matrix_iterator& o) const
{
return !it.operator!=(o);
}
auto operator *()
{
return *it;
}
};
W klasie matrix zdefiniowałem funkcje begin i end.
matrix_iterator<T, ROW, COL> begin() const
{
return {std::begin(matrix_view)};
}
matrix_iterator<T, ROW, COL> end() const
{
return {std::end(matrix_view)};
}
Sama zmienna matrix_view ma typ
array<array<T, COL>, ROW> matrix_view;
Przy próbie skorzystania z tego iteratora w szablonie:
template <typename T, size_t ROW, size_t COL>
matrix<T, ROW, COL> operator *(matrix<T, ROW, COL> m, T value)
{
for (auto& row : m) {
std::transform(std::begin(row), std::end(row), std::begin(row), [=](auto elem) {
return elem * value;
});
}
return m;
}
Otrzymuje błąd:
No matching constructor for initialization of 'matrix_iterator<int, 3UL, 2UL>'
Prośba o pomoc, bo się gryzę z tym a pewnie w kilka minut ogarniecie czego brakuje. :)