Modèle de la spécialisation et de l'héritage

Supposons que j'ai un modèle de classe avec beaucoup de fonctions et je veux me spécialiser à changer seulement quelques-uns d'entre eux et de garder les autres exactement comme spécifié dans le modèle de base de la classe.

Comment puis-je le faire?

Ci-dessous est ce que je veux réaliser, mais la solution n'est pas bonne, car elle ne me permet pas de se référer à la spécialisation pour int comme Base<int> – je besoin pour utiliser IntSpec pour que.

#include <iostream>

using namespace std;

template<typename T>
struct Base
{
  void print1() {cout << "Base::print1" << endl;};
  void print2() {cout << "Base::print2" << endl;};
};

struct IntSpec : public Base<int>
{
  void print2() {cout << "Base<int>::print2()" << endl;};
};

int main()
{
  Base<double> d;
  //Base<int> i;  <-- I want this kind of instantiation
  IntSpec i;

  d.print1();
  d.print2();
  i.print1();
  i.print2();
}

La sortie est:

Base::print1
Base::print2
Base::print1
Base<int>::print2()
InformationsquelleAutor Amadeus | 2013-06-12