VBAでは、これにバリアント型を使用するだけですが、このやや反復的なコードを減らして、より良いswitch case
ブロックを取得するにはどうすればよいですか?
switch(command){
case CMD1:
RESPONSE1 rsp1;
memcpy(&rsp1,pPkt,sizeof(rsp1));
break;
case CMD2:
RESPONSE2 rsp2;
memcpy(&rsp2,pPkt,sizeof(rsp2));
break;
case CMD3:
RESPONSE3 rsp3;
memcpy(&rsp3,pPkt,sizeof(rsp3));
break;
case CMD4:
RESPONSE4 rsp4;
memcpy(&rsp4,pPkt,sizeof(rsp4));
case CMD5:
RESPONSE5 rsp5;
memcpy(&rsp5,pPkt,sizeof(rsp5));
default:
break;
}
私の目標は、これらの5つの応答変数を削除し、1つだけを使用することです。ただし、。のために5つの異なるタイプが必要memcpy
です。
のようなものがあることは承知していcast
ますが、これらのRESPONSE#は異なるサイズの構造体であるため、これはより問題があると思います-そのためにメモリを再割り当てする必要はありませんか?
編集:
muxのおかげで、私のコードにはすでにそのための結合が存在することがわかりました(他の誰かから何かを適応させる)!
typedef union
{
RESPONSE1 rsp1;
RESPONSE2 rsp2;
RESPONSE3 rsp3;
RESPONSE4 rsp4;
RESPONSE5 rsp5;
}
RESPONSE_UNION;
そして、これは私が今使っているものです:
RESPONSE_UNION ru;
switch(command){
case CMD1:
memcpy(&ru.rsp1,pPkt,sizeof(ru.rsp1));
break;
case CMD2:
memcpy(&ru.rsp2,pPkt,sizeof(ru.rsp2));
break;
...
本当に大きな助けです!