Template-Spezialisierung und Vererbung

Angenommen, ich habe eine Vorlagenklasse mit vielen Funktionen und möchte sie spezialisieren, um nur einige von ihnen zu ändern und die anderen genau so zu belassen, wie in der Basisvorlagenklasse angegeben.

Wie kann ich das machen?

Nachstehend ist aufgeführt, was ich erreichen möchte, aber die Lösung ist nicht gut, da ich mich nicht auf die Spezialisierung für beziehen kannint wieBase<int> - Ich muss verwendenIntSpec dafür.

#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();
}

Die Ausgabe ist:

Base::print1
Base::print2
Base::print1
Base<int>::print2()

Antworten auf die Frage(3)

Ihre Antwort auf die Frage