2012-04-09 21 views

Respuesta

17

Con un static_cast. Tenga en cuenta que solo debe hacer esto si el puntero apunta realmente a un objeto del tipo especificado; es decir, el valor del puntero a void se tomó de un puntero a dicho objeto.

thing * p = whatever(); // pointer to object 
void * pv = p;   // pointer to void 
thing * p2 = static_cast<thing *>(pv); // pointer to the same object 

Si necesita hacer esto, quizás desee replantear su diseño. Está renunciando a la seguridad del tipo, por lo que es fácil escribir código no válido:

something_else * q = static_cast<something_else *>(pv); 
q->do_something(); // BOOM! undefined behaviour. 
+3

No, eso no es útil; Está incorrecto. Use 'reinterpret_cast'. –

+0

@MarceloCantos: ¿Por qué utilizarías un reparto aún más peligroso que el que necesitas? –

+2

+1 @MarceloCantos: No, de hecho es correcto. 'static_cast' se usa para invertir conversiones implícitas y el puntero de clase para void pointer es una conversión implícita. –

Cuestiones relacionadas