Ich habe den folgenden Code ein (sehr aus Gründen der Klarheit vereinfacht):Spezialisieren Elementfunktion einer Templat abgeleiteten Klasse
class Base
{
virtual int DoStuff(int arg) = 0;
};
template <typename T>
class Derived : public Base
{
int DoStuff(int arg) override
{
// do some stuff
return 0;
}
};
Dies funktioniert gut. Jetzt möchte ich eine spezielle (vektorisierte) Implementierung von DoStuff implementieren. Und ich brauche die Umsetzung spezifisch sein basierend auf dem Typ T, der hat Abgeleitet, etwa wie folgt:
class Base
{
virtual int DoStuff(int arg) = 0;
virtual int DoStuffVectorized(int arg) = 0;
};
template <typename T>
class Derived : public Base
{
int DoStuff(int arg) override
{
// do some stuff
return 0;
}
int DoStuffVectorized<char>(int arg) override
{
// do some stuff for T == char
return 0;
}
int DoStuffVectorized<int>(int arg) override
{
// do some stuff for T == int
return 0;
}
};
Allerdings bin ich nicht in der Lage, diese Arbeit zu machen.
EDIT: Ich erhalte die folgende Fehlermeldung: Fehler C2143: Syntaxfehler: fehlen; vor '<' auf der Linie int DoStuffVectorized<char>(int arg) override
.
Wenn ich ändern es: template<char> int DoStuffVectorized(int arg) override
i erhalten: error C2898: ... ': Memberfunktion Vorlagen können nicht virtuell sein
Irgendwelche Tipps, wie so etwas zu erreichen? Der Grund, warum ich es brauche, ist, dass ich einen std :: Vektor habe, der Daten verschiedener Typen speichert (durch Verwendung von Derived <>). Auf diese Weise kann ich denselben einfachen Code verwenden, unabhängig vom Typ, der gespeichert wird, und ich möchte, dass dies auch dann der Fall ist, wenn die spezielle vektorisierte Implementierung von DoStuff verwendet wird, die leider typenspezifisch ist.
Was bedeutet "Ich kann es nicht zum Laufen bringen"? –
"Ich kann diese Arbeit jedoch nicht machen" Warum? Irgendwelche Fehlermeldungen? Was funktioniert nicht? – user463035818
Fehlermeldungen hinzugefügt. Es scheint mir, dass ich in einigen Vererbung/Template-Definition Syntaxfehler verloren gehe? – PeterK