Reinterpret_cast отбрасывает квалификаторы
Я добавляю проблему при переинтерпретации переменной, и я не знаю, почему..
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);
}
reinterpret_cast
кажется недопустимым и говорит
reinterpret_cast от 'const void *) до Dialog * отбрасывает квалификаторы
Любая идея
Ответы
Ответ 1
Как сказал Ник Струпат в комментарии,
reinterpret_cast не может отбрасывать cv-квалификаторы
Таким образом, вы можете использовать reinterpret_cast
и const_cast
вместе.
Dialog *dialog = const_cast<Dialog*>(reinterpret_cast<const Dialog *>(data));
Ответ 2
Вам нужно также использовать const_cast
для удаления квалификаторов const
. Кроме того, кастинг из void *
может использовать static_cast
, ему не нужно переинтерпретировать. Например:
Dialog const *dialog = static_cast<Dialog const *>(data);
Dialog *d2 = const_cast<Dialog *>(dialog);
Однако убедитесь, что Диалог на самом деле не является объектом const
; попытка изменить объект const (предположительно setValue
делает это) вызывает поведение undefined.
Я бы предложил переосмыслить интерфейс на ProgressBar
, чтобы избежать необходимости приведения в действие.