2012-04-03 17 views
7

Tengo una función con void * como uno de sus parámetros (el vacío se usa como un objeto genérico). Pero para poder invocar una función en ese objeto genérico, necesito lanzarlo primero, y para eso necesito saber qué tipo es la clase. Y quería saber, ¿es posible aprobar una clase o alguna información que me permita convertir el objeto como un parámetro de función?¿Es posible pasar una clase como parámetro a una función en C++?

+0

¿Es el propietario de la función de conseguir void * como un parámetro o es parte de una API externa? –

+0

Soy el propietario de la función – XaitormanX

+6

Por lo general, es una muy mala idea proporcionar una función con void * como entrada. Hay una manera mejor de lograr un comportamiento genérico: usar plantilla o herencia. Deberías reconsiderar tu diseño. –

Respuesta

9

¿Ha visto alguna vez Templates?

Un ejemplo podría ser algo como

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

Uso:

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

Pero necesito que esa función esté dentro de una clase, y no puedo hacer que esa clase sea una plantilla – XaitormanX

+0

@XaitormanX: Vea el ejemplo actualizado – josephthomas

+0

Gracias. ¿Y cómo se usaría? – XaitormanX

Cuestiones relacionadas