我试图在代码中概括发送接收过程。
通过创建一个表保存每个命令的响应。
我得到了每个响应的特定大小的缓冲区,我想使用该表强制转换它。
问题是我的struct Commmands
使用void*
,我不能使用它进行强制转换。
struct Commands
{
U16 opcode;
void* rparam;
int rlen;
};
我的问题是是否有可能以类似的方式保存指针数组:
Commands arr[] = { { OPCODE1, (Response1*) Rsp, sizeof(Response1) },
{ OPCODE2, (Response2*) Rsp, sizeof(Response2) },
}
但是,这将允许我稍后强制转换缓冲区:
uint8_t缓冲区(MAX_RESP_SIZE);
arr[0] = buffer;
uint8_t respResult = arr[0]->RespStatus; // use it later.
有什么优雅的方法可以做到这一点吗?
Response1和Response2是不同的响应结构(对我发送的不同命令)
编辑:我不想使用另一个转换函数,因为它使表冗余。
是的,您可以像这样将您的void*
指针转换为其原始类型:
if (arr[0].opcode == OPCODE1)
{
Response1* buff = static_cast<Response1*>(arr[0].rparam);
// use buff here
}
else if (arr[0].opcode == OPCODE2)
{
Response2* buff = static_cast<Response2*>(arr[0].rparam);
// use buff here
}