Funktionszeiger auf Member-Funktionen Template-Klasse
Frage
Ich habe eine Templat-Klasse definiert ist (teilweise) als
template <class T> MyClass
{
public:
void DoSomething(){}
};
Wenn ich DoSomething von einer anderen Klasse aufrufe will, aber in der Lage sein, dies zu tun für mehr ‚T‘ Typen an der gleichen Stelle, ich bin für eine Idee stecken als Methode Funktionen Zeiger eindeutig den Klassentyp beschränkt sind. Natürlich ist jeder MyClass eine andere Art, so kann ich nicht speichern Funktionszeiger auf MyClassDoSomething () in einer ‚polymorphen‘ Art und Weise.
Meine Use-Case ist ich speichern möchten, in einer Halte Klasse, ein Vektor der Funktionszeiger auf ‚DoSomething‘, so dass ich einen Anruf auf alle gespeicherten Klassen von einem Ort ausgeben kann.
Hat jemand irgendwelche Vorschläge?
Lösung
Ok, also die Funktors Lösung nicht funktioniert, wie Sie benötigen. Vielleicht sollten Sie Ihre Template-Klasse von einer gemeinsamen Basis „Interface“ Klasse erben haben. Und Sie dann einen Vektor verwendet diese.
So etwas wie folgt aus:
class Base {
public:
virtual ~Base(){}
virtual void DoSomething() = 0;
}
template <class T> class MyClass : public Base {
public:
void DoSomething(){}
};
std::vector<Base *> objects;
objects.push_back(new MyClass<int>);
objects.push_back(new MyClass<char>);
Andere Tipps
Sie wissen, das ist genau das, was ich tun musste. Bizzarly hatte ich es als eine Lösung gilt für meine usecase früh abgezinst, aus Gründen, die jetzt mir entkommen. Ich glaube, ich von einigen metaprogramming Sachen geblendet wurde ich für Kompilierung-Versand (das heißt verwirrend Kompilierung und Laufzeit in meinem verwirrten Gehirn) an der gleichen Stelle zu tun.
Danke für die Rucke!