generic matrix template
This commit is contained in:
parent
a1a0bc1a2f
commit
223c486c92
|
@ -0,0 +1,64 @@
|
||||||
|
template<class T, unsigned ... RestD> struct Matrix;
|
||||||
|
|
||||||
|
template<class T, unsigned FirstDim >
|
||||||
|
struct Matrix<T, FirstDim> {
|
||||||
|
typedef T GenericDimType[FirstDim];
|
||||||
|
|
||||||
|
GenericDimType data;
|
||||||
|
inline T& operator[](unsigned i) { return data[i]; }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T, unsigned FirstDim, unsigned ... RestD >
|
||||||
|
struct Matrix<T, FirstDim, RestD...> {
|
||||||
|
typedef typename Matrix<T, RestD...>::GenericDimType FirstDimType;
|
||||||
|
typedef FirstDimType GenericDimType[FirstDim];
|
||||||
|
|
||||||
|
GenericDimType data;
|
||||||
|
inline FirstDimType& operator[](unsigned i) { return data[i]; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
Matrix<int, 2, 3, 4> m;
|
||||||
|
|
||||||
|
int cnt = 0;
|
||||||
|
for (size_t i = 0; i < 2; ++i) {
|
||||||
|
for (size_t j = 0; j < 3; ++j) {
|
||||||
|
for (size_t h = 0; h < 4; ++h) {
|
||||||
|
m[i][j][h] = cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "Data in matrix:\n";
|
||||||
|
for (size_t i = 0; i < 2; ++i) {
|
||||||
|
for (size_t j = 0; j < 3; ++j) {
|
||||||
|
for (size_t h = 0; h < 4; ++h) {
|
||||||
|
std::cout << m[i][j][h] << ' ';
|
||||||
|
}
|
||||||
|
std::cout << '\n';
|
||||||
|
}
|
||||||
|
std::cout << "ENDDIM\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "Addresses in matrix:\n";
|
||||||
|
for (size_t i = 0; i < 2; ++i) {
|
||||||
|
for (size_t j = 0; j < 3; ++j) {
|
||||||
|
for (size_t h = 0; h < 4; ++h) {
|
||||||
|
std::cout << &m[i][j][h] << ' ';
|
||||||
|
}
|
||||||
|
std::cout << '\n';
|
||||||
|
}
|
||||||
|
std::cout << "ENDDIM\n";
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue