#include <iostream>
#include <vector>
using namespace std;

struct Field2D {
  struct size_type {
     size_t dim1,dim2;
  };
  struct coordinates {
     size_t c1,c2;
  };
Field2D(size_type const & siz) : size_(siz), data_(size_.dim1*size_.dim2) {}
double get(coordinates const & coords) {
  return data_[coords.c1*size_.dim2 + coords.c2];
}
//Other methods
private:
  size_type size_;
  vector<double> data_;
};

struct PositionVersusTime : public Field2D {
	struct size_type { size_t nx, nt; };
	struct coordinates { size_t x, t; };
	PositionVersusTime(size_type const & siz) : Field2D({siz.nx, siz.nt}) { }
	double get(coordinates const & coords) { return Field2D::get({coords.x, coords.t}); }
};

int main() {
   PositionVersusTime::size_type siz;
   siz.nx = 5;
   siz.nt = 2;
   PositionVersusTime myField(siz);
   PositionVersusTime::coordinates coords;
   coords.x = 2;
   coords.t = 0;
   auto out = myField.get(coords);
   return 0;
}