static_cast reinterpret_cast c++ reinterpret-cast

static_cast - reinterpret_cast c++



reinterpret_cast desecha calificadores (2)

Como Nick Strupat declaró en el comentario,

reinterpret_cast no puede deshacerse de los calificadores cv

Así que puedes usar reinterpret_cast y const_cast juntos.

Dialog *dialog = const_cast<Dialog*>(reinterpret_cast<const Dialog *>(data));

Agrego un problema al reinterpretar una variable y no sé por qué ...

int ProgressBar(const uint64_t data_sent, const uint64_t data_total, void const * const data) { Dialog *dialog = reinterpret_cast<Dialog *>(data); dialog->setValue((data_sent * 100) / data_total); }

El reinterpret_cast parece no permitido y dice

reinterpret_cast desde ''const void *) a Dialog * elimina los calificadores

Alguna idea


También debe usar un const_cast para eliminar los calificadores const . Además, la conversión desde void * puede usar static_cast , no es necesario volver a interpretar. Por ejemplo:

Dialog const *dialog = static_cast<Dialog const *>(data); Dialog *d2 = const_cast<Dialog *>(dialog);

Sin embargo, asegúrese de que el Diálogo no sea un objeto const ; el intento de modificar un objeto const (presumiblemente, setValue hace esto) causa un comportamiento indefinido.

Yo sugeriría repensar la interfaz de ProgressBar para evitar necesitar este lanzamiento.