c++ - What type have multidimensional array? -
i writing own 2d matrix class. want design use of class close real math notation. example want access element matrix[3, 6]. c++ didn`t give ability, access base multidimensional array in next way:
int matrix[2][2] = {}; int val = matrix[1][0]; so decided make function return base array. role best function operator(). can access in next way: matrix()[1][0]. ok, started implement , stuck :(. have:
template <typename valtype> class matrix2d { protected: valtype m_data[2][2] = {}; public: valtype** operator()() // <--- type? { return m_data; } } but received compiler error in function above
error c2440: 'return' : cannot convert 'double [2][2]' 'double **'
i understand error no have idea must change avoid error? type function must return?
since tagged c++11, should use std::array. , use indexing operator, not call operator:
template <typename valtype> class matrix2d { protected: using row = std::array<valtype, 2>; std::array<row, 2> m_data; public: row& operator[](size_t idx) { return m_data[idx]; } }; this way can write matrix[1][0] instead of having write matrix()[1][0] (which, frankly, looks typo).
additionally, if prefer both indices simultaneously, write call operator take both:
valuetype& operator()(size_t x, size_t y) { return m_data[x][y]; } that allow matrix(1, 0) alternative matrix[1][0].
Comments
Post a Comment