【发布时间】:2015-09-04 14:38:50
【问题描述】:
我正在开发一个 DLL,它使用一组固定的 10 种数据类型:8/16/32/64 位的无符号/有符号整数和 32/64 位的浮点数。
我从客户端收到一个指向缓冲区的 void 指针以及一个表示数据类型的枚举。然后我必须查看提供的数据类型枚举,以了解要将缓冲区转换为哪种数据类型以提取值。
例子:
nU8Val = (*(U8*)pvBuffer);
nU16Val = (*(U16*)pvBuffer);
nU32Val = (*(U32*)pvBuffer);
有没有办法把这个逻辑组合成一行,比如:
nMyVal = *((TypeOf(nMyVal)*)pvBuffer);
我不需要为所有数据类型定义变量并为每个数据类型枚举重复相同的逻辑
编辑:我更新了示例逻辑,以便清楚地了解我试图做的事情,将 void* 缓冲区转换为接收变量数据类型的指针
【问题讨论】:
-
你不能动态做,但你可以使用一些模板代码。但是要给出答案/建议,缺少一块:您想对结果做什么?
-
我需要将结果与定义的限值进行比较。我有一个具有 MAX 和 MIN 值的数据点,我通过 void* 接收到该点的一条新数据,需要根据数据类型提取它并确保它在 MIN 和 MAX 的范围内跨度>
-
给你的
.dll添加一个C++接口自然可以解决问题。 -
好的,我会为此阅读一些文档。感谢您的快速回复。
-
不,你不能。我能想到的唯一方法是让一个类处理转换,并将不同类型的值存储为双精度值。这意味着您会将输入的每个值 n 转换为双精度值,而不是最佳解决方案。
标签: c++ casting void-pointers