protobuffer的嵌套使用

1、定义嵌套protobuffer

message ***IpaddressPair{
  bytes local_ip = 1;
  bytes remote_ip = 2;
}

message ***ConnectionStatus{
  bool connected = 1;
  bytes peer_id = 2;
  ***IpaddressPair ipaddr_pair = 3;
}

2、使用这个mutable_ipaddr_pair函数会在类里new一个***IpaddressPair;下面这种是正确的

  //test connection_status
  ***ConnectionStatus connection_status_info;
  connection_status_info.set_connected(true);
  connection_status_info.set_peer_id("11-22-33");


  ***IpaddressPair *ipaddr_pair = connection_status_info.mutable_ipaddr_pair();
  ipaddr_pair->set_local_ip("192.168.3.1");
  ipaddr_pair->set_remote_ip("192.168.3.89");

3、解析嵌套protobuffer

    ***ConnectionStatus connection_status;
    connection_status.ParseFromString(serilalized_connection_status);
	
	log_d("peer_id = %s, local_ip = %s, remote_ip = %s", connection_status.peer_id().c_str(), connection_status.ipaddr_pair().local_ip().c_str(), 
    connection_status.ipaddr_pair().remote_ip().c_str());

 

下面是实例化protobuffer时犯错误:

错误原因:ipaddr_pair是局部变量,却赋值给其他对象,在connection_status_info析构时会报错

  ***ConnectionStatus connection_status_info;
  connection_status_info.set_connected(true);
  connection_status_info.set_peer_id("11-22-33");  

  ***IpaddressPair ipaddr_pair;
  connection_status_info.set_allocated_ipaddr_pair(&ipaddr_pair);

如果改成下面这种是正确的:

  ***IpaddressPair *ipaddr_pair = new ***IpaddressPair();
  connection_status_info.set_allocated_ipaddr_pair(ipaddr_pair);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值