Diciamo che ho un gestore di classe con alcune sottoclassi come lo Stringhandler, SomeTypeHandler, AnotherTypeHandler. Il class handler definisce un metodo "handle" come un'interfaccia comune per tutte le sottoclassi. La logica di "gestire" è naturalmente completamente diversa per i diversi gestori.Come posso passare "Qualsiasi tipo di dati" a una funzione in C++
Quindi quello che devo fare è passare un valore di qualsiasi cosa al metodo handle. Le classi specifiche possono quindi trasmettere il "qualcosa" al tipo che si aspettano.
Fondamentalmente quello che serve è qualcosa di simile alla classe Object Java: D
La prima cosa che ho provato è stato un void*
, ma a quanto pare non si può fare B* someB = dynamic_cast<B*>(theVoidPointer)
, quindi senza fortuna lì.
La mia seconda idea era usare boost::any
. tuttavia, il requisito per utilizzare boost :: any è che il valore deve essere cunstructable, che non è il caso dei miei dati.
Qualche idea per far funzionare tutto questo?
Grazie
EDIT: Si noti che io so che potrei utilizzare una classe SomeData senza membri a tutti, e lasciare che i miei dati siano sottoclassi di questo, ma sto cercando un approccio più generico che non necessita di me per creare la mia classe di wrapper.
Sei sicuro di aver bisogno di 'dynamic_cast', e non puoi usare' reinterpret_cast'? –
Come usare i modelli? –
Sembra che la maggior parte delle tue opzioni siano descritte qui: http://stackoverflow.com/questions/913505/casting-void-pointers-depending-on-data-c – briantyler