I add an issue on reinterpreting a variable and I don't know why..
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); }
the reinterpret_cast
seems not allowed and say
reinterpret_cast from 'const void *) to Dialog * casts away qualifiers
Any idea
Purpose for using reinterpret_cast It is used when we want to work with bits. If we use this type of cast then it becomes a non-portable product. So, it is suggested not to use this concept unless required. It is only used to typecast any pointer to its original type.
Use static_cast as the equivalent of a C-style cast that does value conversion, or when we need to explicitly up-cast a pointer from a class to its superclass. Use const_cast to remove the const qualifier. Use reinterpret_cast to do unsafe conversions of pointer types to and from integer and other pointer types.
the result of a pointer-to-pointer reinterpret_cast operation can't safely be used for anything other than being cast back to the original pointer type.
C-style casts are quite similar to reinterpret_cast s, but they have much less syntax and are not recommended. The thinking goes that casting is inherently an ugly operation and it requires ugly syntax to inform the programmer that something dubious is happening.
As Nick Strupat stated in comment,
reinterpret_cast can't cast away cv-qualifiers
So you can use reinterpret_cast
and const_cast
together.
Dialog *dialog = const_cast<Dialog*>(reinterpret_cast<const Dialog *>(data));
You need to also use a const_cast
to remove const
qualifiers. Also, casting from void *
can use static_cast
, it does not need to reinterpret. For example:
Dialog const *dialog = static_cast<Dialog const *>(data); Dialog *d2 = const_cast<Dialog *>(dialog);
However , make sure that the Dialog is actually not a const
object; attempting to modify a const object (presumably setValue
does this) causes undefined behaviour.
I'd suggest rethinking the interface to ProgressBar
to avoid needing this cast.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With