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()