Google Protocol Buffer ripetuto campo C ++
-
21-09-2019 - |
Domanda
Ho il buffer di protocollo di seguito. Si noti che StockStatic è un campo ripetuto.
message ServiceResponse
{
enum Type
{
REQUEST_FAILED = 1;
STOCK_STATIC_SNAPSHOT = 2;
}
message StockStaticSnapshot
{
repeated StockStatic stock_static = 1;
}
required Type type = 1;
optional StockStaticSnapshot stock_static_snapshot = 2;
}
message StockStatic
{
optional string sector = 1;
optional string subsector = 2;
}
Sto compilando i campi StockStatic mentre scorrendo un vettore.
ServiceResponse.set_type(ServiceResponse_Type_STOCK_STATIC_SNAPSHOT);
ServiceResponse_StockStaticSnapshot stockStaticSnapshot;
for (vector<stockStaticInfo>::iterator it = m_staticStocks.begin(); it!= m_staticStocks.end(); ++it)
{
StockStatic* pStockStaticEntity = stockStaticSnapshot.add_stock_static();
SetStockStaticProtoFields(*it, pStockStaticEntity); // sets sector and subsector field to pStockStaticEntity by reading the fields using (*it)
}
Ma il codice di cui sopra è giusto solo se StockStatic era un campo facoltativo e non un campo ripetuto. Le mie domande è ciò che riga di codice che mi manca per rendere un campo ripetuto?
Soluzione
No, si sta facendo la cosa giusta.
Ecco un frammento del mio PB (particolare ommited per brevità):
message DemandSummary
{
required uint32 solutionIndex = 1;
required uint32 demandID = 2;
}
message ComputeResponse
{
repeated DemandSummary solutionInfo = 3;
}
... e il C ++ per riempire ComputeResponse :: solutioninfo:
ComputeResponse response;
for ( int i = 0; i < demList.size(); ++i ) {
DemandSummary* summary = response->add_solutioninfo();
summary->set_solutionindex(solutionID);
summary->set_demandid(demList[i].toUInt());
}
response.solutionInfo ora contiene elementi demList.size ().
Altri suggerimenti
Un altro modo di realizzare la stessa cosa:
message SearchResponse {
message Result {
required string url = 1;
optional string title = 2;
repeated string snippets = 3;
}
repeated Result result = 1;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow