1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
//tensor.h
//class declaration
template<int... dims>
struct Tensor;
//class definition
template<int N,int... dims>
struct Tensor<N,dims...>
{
bool covariant;
char index;
std::vector<Tensor<dims...>> el;
Tensor();
Tensor(const Tensor<N,dims...> &);
Tensor(std::initializer_list<Tensor<dims...>>);
...
Tensor<dims...> & operator [] (int i);
Tensor<dims...> operator [] (int i) const;
...
};
//Class definition of template specialization for 0-rank tensors
template<>
struct Tensor<> : public Field {using Field::Field;};
...
template<int N,int... dims>
Tensor<N,dims...> operator * (const Tensor<N,dims...> &,const Field &);
template<int N,int... dims>
Tensor<N,dims...> operator * (const Field &,const Tensor<N,dims...> &);
template<int... dims1,int N,int... dims2>
Tensor<dims1...,dims2...> operator * (const Tensor<dims1...,-N> &,const Tensor<N,dims2...> &);
...
|