C-Programmierung

Container Klassen Template

KlassenTemplate | | Standard Template Library

Einfaches Beispiel einer templatisierten Container-Klasse, welche ein einziges Element vom Typ T aufnehmen kann:

template<class T>
class C {
   public:
      C(const T &e=0) {element = e;}
      void set(const T &e) {element = e;}
      T get() {return(element);}

   protected:
      T element;
};

Einfaches Beispiel einer templatisierten Container-Klasse, welche eine Matrix mit c Spalten, r Zeilen mit Elementen vom Typ T speichern kann:

template<class T>
class Matrix {
   public:

      Matrix(int c=1, int r=1)
      {
         m=new T[c*r];

         for (int i=0; i<c*r; i++) m[i]=0;

         cols=c;
         rows=r;
      }

      ~Matrix() {delete[] m;}

      void set(int c, int r, const T &e) {m[c+r*cols] = e;}
      T get(int c, int r) {return(m[c+r*cols]);}

   protected:

      T *m;
      int cols, rows;
};

Beispiele:

// representation of a mathematical 3x3 matrix
Matrix<double> mat(3,3);

// produce identity matrix
mat.set(0,0,1);
mat.set(1,1,1);
mat.set(2,2,1);

// representation of an RGB image
Matrix<RGBPixel> img(1024,768);
...

Hinweis: Aufgrund von Compiler-Beschränkungen empfiehlt es sich, templatisierte Klassen nur header-only zu definieren.

KlassenTemplate | | Standard Template Library

Options: