Google proto 中的多嵌套 `mutable`

mulit netsting `mutable` in Google proto

我有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。我以为堆栈上存在 Response 个对象。 Response 个对象在堆栈中包含 RecommendInfo 个对象。因为我想在 RecommendInfo 对象中更改 items 。所以我用mutable_vec_item()设置items.

我试试

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

代码有效并打印完整的 RecommendInfo 对象,包括 vec_item.

我解释不清楚。当我尝试更改 recom_response.recominfo() 时,它似乎是错误的。但是,RecommendInfo 不是堆栈上的对象吗?而我只想修改 vec_item.

修改vecitem修改它所属的RecommendInfo

因此,为了修改 vecitem 的内容,您必须在可修改(也称为可变)RecommendInfo 上进行操作。这就是为什么你必须使用 mutable_recominfo() 而不是 recominfo().