待改写的结构体:三层嵌套
using namespace std;
namespace A{
namespace B{
namespace C{
namespace D {
struct E2E
{
uint64 CRC;
uint32 Length;
};
struct IPC_HEADER
{
E2E e2e;
uint64 counter;
};
struct Header
{
int64 seq;
uint64 stamp;
};
struct ABC
{
uint8 ifc_line01_type;
uint8 ifc_line02_type;
};
struct HmiOutput
{
Header header;
ABC land_ass_sys;
};
struct Struct{
IPC_HEADER ipc_header;
HmiOutput hmi_output;
};
}//end of namespace D
}//end of namespace C
}//end of namespace B
}//end of namespace A
对应的proto文件:
syntax = "proto3";
package A.B.C.D;
message StructPb{
message IPC_HEADER{
message E2E{
uint64 CRC=1;
uint32 Length=2;
}
E2E e2e=1;
uint64 counter=2;
}
message HmiOutput{
message Header{
int64 seq=1;
uint64 stamp=2;
}
message ABC{
uint32 ifc_line01_type=1;
uint32 ifc_line02_type=2;
}
Header header=1;
ABC=2;
}
IPC_HEADER ipc_header=1;
HmiOutput hmi_output=2;
}
对应的部分赋值代码:
可以对应着生成的pb.h文件找,赋值语句和类名都是对应的。
//先创建对象,供后面使用
A::B::C::D::StructPb my_structpb;
A::B::C::D::StructPb_IPC_HEADER ipc_header;
A::B::C::D::StructPb_IPC_HEADER_E2E e2e;
e2e.set_crc(CRC);
e2e.set_length(Length);
ipc_header.mutable_e2e()->CopyFrom(e2e);
ipc_header.set_counter(counter);
//...
my_structpb.mutable_ipc_header()->CopyFrom(ipc_header);
my_structpb.mutable_hmi_output()->CopyFrom(hmioutput);