I would suggest using std::array . But using it directly in code, like a multi-array, is a little ugly. Therefore, I propose an alias that is defined as:
#include <array> namespace details { template<typename T, std::size_t D, std::size_t ... Ds> struct make_multi_array : make_multi_array<typename make_multi_array<T,Ds...>::type, D> {}; template<typename T, std::size_t D> struct make_multi_array<T,D> { using type = std::array<T, D>; }; } template<typename T, std::size_t D, std::size_t ... Ds> using multi_array = typename details::make_multi_array<T,D,Ds...>::type;
Then use it like:
public: multi_array<float,4,4> getMatrix() { return m; } private: multi_array<float,4,4> m;
You can use the alias in other places, for example:
//same as std::array<int,10> //similar to int x[10] multi_array<int,10> x; //same as std::array<std::array<int,20>,10> //similar to int y[10][20] multi_array<int,10,20> y; //same as std::array<std::array<std::array<int,30>,20>,10> //similar to int z[10][20][30] multi_array<int,10,20,30> z;
Hope this helps.