C ++ Реализация класса представленияC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++ Реализация класса представления

Сообщение Anonymous »

У меня есть математический вектор класс для работы геометрии (точка и поперечный продукт, операции вектора-векторного вектора, операции вектора-салара, матричное преобразование ... и т. Д.):

Код: Выделить всё

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
), которые могут интерпретировать на месте (без владения данными) диапазон значений как вектор. Возможное решение может быть: < /p>

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»