有没有办法找出对象的类型(字节数组形式)C++?
Is there a way to figure out the type of object (in array of bytes form) C++?
我一直在使用 boost::asio 作为客户端服务器应用程序,我将打包的结构作为消息来回发送,服务器需要识别传递给它的请求结构的类型并相应地确定响应为了它。现在每个结构都有一个唯一的 TemplateId
,它存储在二级结构中:MessageHeader
,有没有办法从接收到的字节数组 (char *) 中知道结构的类型。
示例结构:
typedef struct {
MessageHeaderInComp MessageHeaderIn;
RequestHeaderComp RequestHeader;
uint32_t Username;
char Pad4[LEN_PAD4];
} __attribute__((packed)) UserLogoutRequest;
typedef struct {
uint32_t BodyLen;
uint16_t TemplateID; //this is unique
char NetworkMsgID[LEN_NETWORKMSGID];
char Pad2[LEN_PAD2];
} __attribute__((packed)) MessageHeaderInComp;
目前我正在使用:
const UserLogoutRequest*obj = reinterpret_cast<const UserLogoutRequest*>(buf); //buff is a character array
int tempId = obj->MessageHeaderIn.TemplateID;
但是这是针对特定类型 (UserLogoutRequest) 的硬编码,我想替换它,我该怎么办?欢迎任何想法或建议。
如果所有 响应具有相同的初始 结构
,您的方法将起作用
typedef struct {
uint32_t BodyLen;
uint16_t TemplateID; //this is unique
如果 所有 的请求都以此为开头,它将起作用。无论是真实类型。您可以将任何 char *
指针转换为 MessageHeaderInComp
类型并验证 TemplateID
.
事实上,许多库中都使用了该方法,并且根据类型 id,稍后可以根据 id 将其转换为正确的结构。
我一直在使用 boost::asio 作为客户端服务器应用程序,我将打包的结构作为消息来回发送,服务器需要识别传递给它的请求结构的类型并相应地确定响应为了它。现在每个结构都有一个唯一的 TemplateId
,它存储在二级结构中:MessageHeader
,有没有办法从接收到的字节数组 (char *) 中知道结构的类型。
示例结构:
typedef struct {
MessageHeaderInComp MessageHeaderIn;
RequestHeaderComp RequestHeader;
uint32_t Username;
char Pad4[LEN_PAD4];
} __attribute__((packed)) UserLogoutRequest;
typedef struct {
uint32_t BodyLen;
uint16_t TemplateID; //this is unique
char NetworkMsgID[LEN_NETWORKMSGID];
char Pad2[LEN_PAD2];
} __attribute__((packed)) MessageHeaderInComp;
目前我正在使用:
const UserLogoutRequest*obj = reinterpret_cast<const UserLogoutRequest*>(buf); //buff is a character array
int tempId = obj->MessageHeaderIn.TemplateID;
但是这是针对特定类型 (UserLogoutRequest) 的硬编码,我想替换它,我该怎么办?欢迎任何想法或建议。
如果所有 响应具有相同的初始 结构
,您的方法将起作用typedef struct {
uint32_t BodyLen;
uint16_t TemplateID; //this is unique
如果 所有 的请求都以此为开头,它将起作用。无论是真实类型。您可以将任何 char *
指针转换为 MessageHeaderInComp
类型并验证 TemplateID
.
事实上,许多库中都使用了该方法,并且根据类型 id,稍后可以根据 id 将其转换为正确的结构。