保存结构的类型转换声明的数组



我试图在代码中概括发送接收过程。

通过创建一个表保存每个命令的响应。

我得到了每个响应的特定大小的缓冲区,我想使用该表强制转换它。

问题是我的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
}

最新更新