template <class T>
class Tabla {
  public:
   Tabla(int nElem);
   ~Tabla();
   T& operator[](int indice) { return pT[indice]; }

  private:
   T *pT;
   int nElementos;
};

// Definición:
template <class T>
Tabla<T>::Tabla(int nElem) : nElementos(nElem) {
   pT = new T[nElementos];
}

template <class T>
Tabla<T>::~Tabla() {
   delete[] pT;
}

main(){
  Tabla<int>   TablaInt(32);   // Tabla de 32 enteros
  Tabla<float> TablaFloat(12); // Tabla de 12 floats
  Tabla<bool>  TablaBool(10);  // Tabla de 10 bools
}
