c++ - C++ 中的动态数据类型转换

标签 c++ casting void-pointers

我正在开发一个 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/

相关文章:

c++ - 无法将参数 1 从 'std::shared_ptr<ChaseState>' 转换为 'std::shared_ptr<State<Cow>>

c++ - 在编译时将 std::array 转换为另一种数据类型?

c - 将 struct 作为参数传递以代替 void*

c++ - 什么时候在 C++ 中使用 "declare"?

c++ - QGraphicsScene : How to map item movements into QUndoCommand?

c++ - 我可以在 lambda 捕获子句中声明一个变量吗?

c# - 使用Couchbase时发生类型转换错误

c++ - 这里如何正确使用for_each?

c - int 指针指向 void 指针,以某种方式指向 char 数组?

c++ - 将 void* 转换为多个继承类的父类(super class)不会调用正确的方法