Lets sagen, ich habe eine Klasse Handler mit einigen Unterklassen wie stringhandler, SomeTypeHandler, AnotherTypeHandler. Der Klassenhandler definiert eine Methode "handle" als eine gemeinsame Schnittstelle für alle Unterklassen. Die Logik zum "Handhaben" ist natürlich für die verschiedenen Handler völlig unterschiedlich.Wie kann ich "Jede Art von Daten" an eine Funktion in C++ übergeben
Also was ich tun muss, ist einen Wert von irgendetwas an die Handle-Methode übergeben. Die spezifischen Klassen können dann das "alles" auf den erwarteten Typ umwandeln.
Im Grunde, was ich brauche, ist so etwas wie das Java-Klasse Objekt: D
Das erste, was ich versuchte, war ein void*
, aber anscheinend kann man nicht B* someB = dynamic_cast<B*>(theVoidPointer)
tun, so dass es kein Glück.
Meine zweite Idee war, boost::any
zu verwenden. Voraussetzung für die Verwendung von boost :: any ist jedoch, dass der Wert cunstructable kopiert werden muss, was bei meinen Daten nicht der Fall ist.
Irgendwelche Ideen, um das zum Laufen zu bringen?
Dank
EDIT: Beachten Sie, dass ich weiß, dass ich eine some Klasse ohne Mitglieder überhaupt nutzen könnte, und meine Daten Subklassen davon sein lassen, aber ich bin für einen allgemeineren Ansatz suchen, die mich nicht erfordern um meine eigene Wrapperklasse zu erstellen.
Sind Sie sicher, dass Sie 'dynamic_cast' brauchen und' 'reinterpret_cast' nicht verwenden können? –
Wie wäre es mit Vorlagen? –
Es sieht so aus, als ob die meisten Ihrer Optionen hier beschrieben sind: http://stackoverflow.com/questions/913505/casting-void-pointers-depending-on-data-c – briantyler