我写了这么一段代码:
RecommendResponse recommendResponse;
*(recommendResponse.recominfo().mutable_vecitem()) = {items.begin(), items.end()};
为了做一件事情,设置推荐响应的物品item的打分结果。(item在这个场景是广告app)。
本以为这样就安然无事,但是算法同学反馈我这边给了个空包,里面无一个item。从hdfs捞日志看响应包确实为空。
可能我对pb的读写有点误解。
首先我想到的是创造一个空响应,定义为RecommendResponse。
然后呢这个RecommendResponse在栈上应该会创建一个内嵌的结构体recominfo。
proto文件定义如下(为了方便阅读,裁掉不相干的内容):
message RecommendInfo{
repeated RecommendItem vecItem = 1;
}
message RecomResponse{
RecommendInfo recomInfo = 1;
}
于是我在recomInfo这个结构体实例上继续添加vecitem
那么根据mutalbe_vecitem规则,我应该这样添加。用大括号重载{},传入items(类型为std::vector)的begin()和end()迭代器。
*(recom_response.recominfo().mutable_vecitem()) = {items.begin(), items.end()};
这样应该可以设置recommendResponse.recominfo(),那么这样recommendResponse也相应生成。
但是发现得用
*(recom_response.mutable_recominfo()->mutable_vecitem()) = {items.begin(), items.end()};这样应该可以设置recommendResponse.recominfo(),那么这样recommendResponse也相应生成。
这样才能生成recommendResponse这个结构体实例。
那么到底这个错误关键点上哪里呢,对mutable_机制理解不到位吗?
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。