Seb*_*Seb 32 c++ 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);
}
Run Code Online (Sandbox Code Playgroud)
在reinterpret_cast
似乎不允许,说
从'const void*)到Dialog*的reinterpret_cast抛弃了限定词
任何的想法
Pra*_*ari 38
正如Nick Strupat在评论中所述,
reinterpret_cast无法抛弃cv-qualifiers
所以,你可以使用reinterpret_cast
和const_cast
在一起.
Dialog *dialog = const_cast<Dialog*>(reinterpret_cast<const Dialog *>(data));
Run Code Online (Sandbox Code Playgroud)
您还需要使用a const_cast
来删除const
限定符.另外,铸造void *
可以使用static_cast
,它不需要重新解释.例如:
Dialog const *dialog = static_cast<Dialog const *>(data);
Dialog *d2 = const_cast<Dialog *>(dialog);
Run Code Online (Sandbox Code Playgroud)
但是,请确保Dialog实际上不是const
对象; 试图修改一个const对象(大概是setValue
是这样做)会导致未定义的行为.
我建议重新考虑接口,ProgressBar
以避免需要这个演员.
归档时间: |
|
查看次数: |
24245 次 |
最近记录: |