在 Google proto 中 mulit netsting 'mutable'

mulit netsting `mutable` in Google proto

提问人:mariolu 提问时间:10/12/2021 更新时间:10/20/2021 访问量:275

问:

我有 proto 文件,说,

message RecommendInfo{
 repeated RecommendItem vec_item = 1;  
}

message Response{
 RecommendInfo recomInfo = 1;
}

我想生成类型响应。 所以我使用以下代码,Response

Response response;
*(recommendResponse.recominfo().mutable_vec_item()) = {items.begin(), items.end()};
LOG_INFO << response.DebugString();

但是有空的 vecitem。我以为堆栈上存在对象。 object 包括堆栈上的对象。因为我想改变内部对象。所以我用设置.ResponseResponseRecommendInfoitemsRecommendInfomutable_vec_item()items

我尝试

*(recom_response.mutable_recominfo()->mutable_vecitem()) = {items.begin(), items.end()};

代码工作并打印完整的对象,包括 .RecommendInfovec_item

我无法解释清楚。当我试图改变时,它似乎是错误的。但是,对象不是在堆栈上吗?我只想修改.recom_response.recominfo()RecommendInfovec_item

C++(英语:C++) 协议缓冲区 可变 原始

评论


答:

1赞 user4442671 10/12/2021 #1

修改修改它所属的。vecitemRecommendInfo

所以为了修改 的内容,你必须对一个可修改的(又名可变的)进行操作。这就是为什么你必须使用而不是 .vecitemRecommendInfomutable_recominfo()recominfo()