Sun, 03 Nov 2019 18:13:38 +0200
renamings
#pragma once #include <QGenericMatrix> template<int Rows, int Columns, typename T = double> struct Matrix { T values[Rows][Columns]; T& operator()(int row, int column) { return this->values[row][column]; } T operator()(int row, int column) const { return this->values[row][column]; } }; template<int Rows, int Columns, typename T> QGenericMatrix<Rows, Columns, T> matrixToQGenericMatrix(const Matrix<Rows, Columns, T>& matrix) { return {matrix.values}; } template<int Rows, int Columns, typename T> Matrix<Rows, Columns, T> matrixFromQGenericMatrix(const QGenericMatrix<Rows, Columns, T&> matrix) { Matrix<Rows, Columns, T> result; for (int row = 0; row < Rows; row += 1) { for (int column = 0; column < Columns; column += 1) { result(row, column) = matrix(row, column); } } return result; } using Matrix3x3 = Matrix<3, 3>; Q_DECLARE_METATYPE(Matrix3x3); using Matrix4x4 = Matrix<4, 4>; Q_DECLARE_METATYPE(Matrix4x4); template<int Rows, int Columns, typename T> QDataStream& operator<<(QDataStream& stream, const Matrix<Rows, Columns, T>& matrix) { return stream << matrixToQGenericMatrix(matrix); } template<int Rows, int Columns, typename T> QDataStream& operator>>(QDataStream& stream, Matrix<Rows, Columns, T>& matrix) { QGenericMatrix<Rows, Columns, T> qmatrix; stream >> qmatrix; matrix = matrixFromQGenericMatrix(matrix); return stream; }