1 2 class Cache{ 3 public: 4 typedef double& proxy ; 5 typedef double* iterator ; 6 Cache(iterator data_)7 Cache( iterator data_) : data(data_){} 8 ref(int i)9 inline proxy ref(int i){ return data[i] ; } ref(int i)10 inline proxy ref(int i) const { return data[i] ; } 11 12 private: 13 iterator data ; 14 } ; 15 16 class Vec { 17 public: 18 typedef double& proxy ; 19 Vec(double * data_)20 Vec( double* data_ ) : cache(data_){} 21 inline proxy operator[]( int i){ return cache.ref(i) ; } 22 inline proxy operator[]( int i) const { return cache.ref(i) ; } 23 24 private: 25 Cache cache ; 26 } ; 27 28