Я изучаю С++ ProtoBuf.
У меня есть следующая структура, которую мне нужно сериализовать:
enum phonetype
{
DESKPHONE,
MOBILE,
WIRELESSPHONE
};
struct phonenumber
{
int ptype;
string number;
};
struct address
{
string addr1;
string addr2;
};
struct college
{
string collegename;
string collegeaddress;
};
struct student
{
int id;
string name;
double age;
string email;
struct phonenumber phoneN;
struct address addr;
struct college col;
};
Я инициализировал структуру следующим образом:
student stud = {123, "Stud_1", 30, "none",
{MOBILE, "123456789"},
{"Boston, US", "None"},
{"Boston college", "Boston"}};
Теперь я хотел бы создать сериализованную строку этой структуры, для которой я написал следующий файл .proto
:
syntax = "proto2";
message studentP
{
required int32 id = 1;
required string name = 2;
required double age = 3;
optional string email = 4;
message phonenumberP
{
required int32 ptype = 1;
required string number = 2;
}
message addressP {
required string addr1 = 1;
optional string addr2 = 2;
}
message collegeP {
required string collegename = 1;
optional string collegeaddress = 2;
}
}
В моем коде C++ я устанавливаю значения proto obj следующим образом:
studentP studObj;
studObj.set_name(stud.name);
studObj.set_eid(stud.id);
studObj.set_age(stud.age);
studentP::phonenumberP *phone;
phone->set_ptype(stud.phoneN.ptype);
phone->set_number(stud.phoneN.number);
studentP::addressP *addr;
addr->set_addr1(stud.addr.addr1);
addr->set_addr2(stud.addr.addr2);
studentP::collegeP *coll;
coll->set_collegename(stud.col.collegename);
coll->set_collegeaddress(stud.col.collegeaddress);
string student_str;
studObj.SerializeToString(&student_str);
Выше я отдельно установил значения для внутренних структур класса studentP
.
Как установить значения для внутренней структуры studentP
объекта studObj
?
Нужно ли вызывать SerializeToString
для каждой внутренней структуры?
set_eid()
›set_id()
. И указателиphone
,addr
иcoll
не инициализированы и не указывают на допустимые типы в памяти. Использование этих указателей приведет к Неопределенное поведение. - person Azeem   schedule 01.08.2020