我正在开发一个 DLL,它使用一组固定的 10 种数据类型:8/16/32/64 位的无符号/有符号整数和 32/64 位的 float 。
我从客户端接收到一个指向缓冲区的空指针以及一个表示数据类型的枚举。然后,我必须查看提供的数据类型枚举,以了解将缓冲区转换为哪种数据类型,以便提取值。
例子:
nU8Val = (*(U8*)pvBuffer);
nU16Val = (*(U16*)pvBuffer);
nU32Val = (*(U32*)pvBuffer);
有什么办法可以将这个逻辑组合成一行,例如:
nMyVal = *((TypeOf(nMyVal)*)pvBuffer);
我不需要为所有数据类型定义变量并为每个数据类型枚举重复相同的逻辑
编辑:为了清楚地将 void* 缓冲区转换为接收变量数据类型的指针,我更新了示例逻辑以清楚地了解我正在尝试做的事情
最佳答案
这是一个可以从受让人推断类型的模板,这样您就不必重复它:
template<typename To>
void copy_deduced(void* from, To& to) {
to = *reinterpret_cast<To*>(from); // avoid c-style casts
}
copy_deduced(pvBuffer, nU8Val);
// ...
关于c++ - C++ 中的动态数据类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400754/