1 template <typename T> 2 class matrix3x3 { 3 public: 4 T x[3][3]; 5 6 matrix3x3() {} 7 8 matrix3x3(const T (&_x)[3][3]) { 9 int i, j; 10 for (i = 0; i < 3; ++i) 11 for (j = 0; j < 3; ++j) 12 x[i][j] = _x[i][j]; 13 } 14 }; 15 16 typedef void (*binop)(void *, const void *, const void *); 17 void tajny_algoritmus(void *, const void *, const void *, long, binop, binop); 18 19 template<typename T> 20 matrix3x3<T> operator*(const matrix3x3<T> &a, const matrix3x3<T> &b) { 21 matrix3x3<T> r; 22 23 auto plus = [](void *er, const void *ea, const void *eb) { 24 T &ter = * (T *) er; 25 const T &tea = * (const T *) ea; 26 const T &teb = * (const T *) eb; 27 ter = tea + teb; 28 }; 29 30 auto krat = [](void *er, const void *ea, const void *eb) { 31 T &ter = * (T *) er; 32 const T &tea = * (const T *) ea; 33 const T &teb = * (const T *) eb; 34 ter = tea * teb; 35 }; 36 37 tajny_algoritmus((void *) &r, (const void *) &a, (const void *) &b, sizeof(T), plus, krat); 38 39 return r; 40 }