protobuf,c++进行嵌套消息的赋值

待改写的结构体:三层嵌套

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);

你可能感兴趣的:(c++,开发语言)