I have proto file, saying that,
message RecommendInfo{
repeated RecommendItem vec_item = 1;
}
message Response{
RecommendInfo recomInfo = 1;
}
I want to produce type Response
response.
So I use following code,
Response response;
*(recommendResponse.recominfo().mutable_vec_item()) = {items.begin(), items.end()};
LOG_INFO << response.DebugString();
But there gets empty vecitem. I thought there existed Response
object on stack. Response
object includes RecommendInfo
object on the stack. Because I want to change items
inside RecommendInfo
object. So I use mutable_vec_item()
to set items
.
I try
*(recom_response.mutable_recominfo()->mutable_vecitem()) = {items.begin(), items.end()};
The code works and print complete RecommendInfo
object including vec_item
.
I can't explain it clearly. When I try to change recom_response.recominfo()
, it seems to be wrong. However,isn't RecommendInfo
an object on stack? And I just want to modify vec_item
.
Modifying vecitem
modifies the RecommendInfo
it belongs to.
So in order to modify the content of vecitem
, you have to be operating on a modifiable (aka mutable) RecommendInfo
. That's why you have to use mutable_recominfo()
instead of recominfo()
.