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?

War es hilfreich?

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!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top