【发布时间】:2013-12-17 12:25:06
【问题描述】:
我觉得可以叫字面意思?
enum packet_structures{
PacketOne,
PacketTwo,
PacketThree
};
struct PacketOne{
unsigned int packet_id;
};
struct PacketTwo{
unsigned int packet_id;
};
struct PacketThree{
unsigned int packet_id;
};
假设我有一个通用数据包。
struct PacketGeneral{
packet_structures TypeOfPacket;
};
PacketGeneral newPacket;
newPacket.TypeOfPacket = PacketOne;
我可以直接使用该枚举的名称将 char* 类型转换为结构(即 PacketOne)吗?无需使用 (struct PacketOne) 进行类型转换,我如何仅使用枚举 newPacket.TypeOfPacket 对相同的结构进行类型转换?
【问题讨论】:
-
我认为你需要写
struct PacketGeneral newPacket。我不会推荐这个。 -
它的最终目标是什么?您想在“C”中进行继承吗?如果是这样,为什么“C++”标签在这里?
-
不,你不能。 C 没有反射,我怀疑你是否真的需要这些。
-
只是试图找到一种方法来根据我 msg_peek 到一般(父)数据包的枚举类型来对数据包进行类型转换。所以我可以在没有 msg_peek 的情况下读取并读取正确的 sizeof 结构,然后将该 char* 缓冲区类型转换为结构 PacketOne。这是可行的,但非常难看,就像手动对每个结构进行类型转换一样。这就是为什么我希望使用 Enum 作为结构的标识符