如何通过vector构造函数一行初始化包含Protobuf对象的向量?
一行代码构造含Protobuf对象的vector
当然可以用一行代码直接通过vector的构造函数实现,完全替代你原来的两行写法:
std::vector<someproto> vector_protos(1);
这行代码会直接构造一个包含1个默认构造的someproto对象的vector,和你先声明空vector再调用emplace_back()的效果完全一致。原因是Protobuf自动生成的类都支持默认构造,而std::vector的这个构造函数(接受元素数量的版本)会为每个元素调用默认构造函数,完成对象初始化。
如果需要一次性创建多个默认构造的Protobuf对象,只需要修改数字即可:
// 创建包含5个默认someproto对象的vector std::vector<someproto> vector_protos(5);
要是你需要用某个预先初始化好的Protobuf对象来填充vector,还可以用vector的另一个构造函数:
someproto pre_init_proto; pre_init_proto.set_your_field("some_value"); // 创建包含3个拷贝自pre_init_proto的对象的vector std::vector<someproto> vector_protos(3, pre_init_proto);
内容的提问来源于stack exchange,提问作者A. Fenzry
相关产品推荐
相关产品推荐

