Код: Выделить всё
template
class Vector {
public:
Vector() = default;
Vector(const T values[N])
{
for(std::size_t i=0; i < N; i++)
m_data[i] = values[i];
}
Vector& operator+=(const Vector& vec)
{
for(std::size_t i=0; i < N; i++)
m_data[i] += vec.m_data[i];
return *this;
}
[...]
private:
T m_data[N];
};
< /code>
Я хотел бы внедрить класс представления (VectorViewКод: Выделить всё
template
class VectorView {
public:
VectorView () = default;
VectorView(const T* data)
{
m_data = data;
}
VectorView& operator+=(const VectorView& vec)
{
for(std::size_t i=0; i < N; i++)
m_data[i] += vec.m_data[i];
return *this;
}
[...]
private:
T* m_data;
};
< /code>
Таким образом, его можно использовать следующим образом: < /p>
Vector ratio {10,10,0}; // a vector owning the data
std::vector image(32*32*3);
VectorView pixel(&image[10*3]); // points on the 10th pixel, does not own the data
pixel += ratio; // image is directly modified in place
Многие функции имеют одинаковую реализацию, например, оператор+= для вектора и Vectorview в этом случае. Оператор+(Vector, Vector) , Operator+(VectorView, VectorView) , Operator+(Vector, VectorView) и Operator+(VectorView, Vector) . Если функция принимает любой из этих двух классов, она будет реализована два раза.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... view-class
Мобильная версия