2012-04-03 16 views
7

Ho una funzione con void * come uno dei suoi parametri (il vuoto è usato come un oggetto generico). Ma per poter chiamare una funzione in quell'oggetto generico, ho bisogno di lanciarlo prima, e per questo ho bisogno di sapere che tipo è la classe. E volevo sapere, è possibile passare una classe o qualche informazione che mi permetta di lanciare l'oggetto come parametro di funzione?È possibile passare una classe come parametro a una funzione in C++?

+0

sono il proprietario della funzione di ottenere void * come un parametro o è parte di un'API esterna? –

+0

Sono il proprietario della funzione – XaitormanX

+6

In genere è una pessima idea fornire una funzione con void * come input. Ci sono modi migliori per ottenere un comportamento generico: usare template o ereditarietà. Dovresti riconsiderare il tuo design. –

risposta

9

Per caso hai esaminato lo Templates?

Un esempio potrebbe essere qualcosa come

class SomeClass 
{ 
public: 
    template<typename CastClass> 
    void DoSomething(void* someArg) 
    { 
     (CastClass)someArg; 
    } 
}; 

Usage:

class A{ }; // Some random test class 

SomeClass test; 
A a; 
test.DoSomething<int>(&a); // The template parameter can be anything. 
          // I just have int to make it a smaller example. 
+0

Ma ho bisogno che quella funzione si trovi in ​​una classe, e non posso rendere quella classe un modello – XaitormanX

+0

@XaitormanX: Vedi l'esempio aggiornato – josephthomas

+0

Grazie. E come sarebbe usato? – XaitormanX

Problemi correlati