从一个定义为正好包含N
个元素的RepeatedField开始,我填充了一个std::数组。
std::array<int, 6> entry;
size_t i = 0;
for (const auto& item: msg.items()){
assert(i < 6);
entry[i++] = item;
}
这可以正常工作,但是有没有更好的方法来初始化它?填充std::vector可以很好地用于初始化列表,但是std::array是really different。
是否可以在包含std::array
的结构体的聚合初始化中使用RepeatedFields?
到目前为止,我所尝试的甚至没有编译:
entry = {msg.items().begin(), msg.items().end()};
这是可以理解的,因为std::array没有接受std::initializer_list
的构造函数;但我想做的事可能吗?
4条答案
按热度按时间3bygqnnd1#
你可以尝试使用STL算法
或者如果你有多个这样的情况,你可以写帮助函数。
https://godbolt.org/z/zEjorr7Tx
bfnvny8b2#
最简单的方法是直接使用聚合初始化
或者你可以写一个函数
vlurs2pr3#
这是一个通用的版本,可以处理
int
,double
等任意类型。它使用了一个函数模板make_array
,循环遍历元素并填充元素。程序使用了vector
及其begin
和end
方法。working demo
将函数模板的签名更改为是**微不足道的
然后在使用/调用它时传递该范围。
ykejflvf4#
就初始化而言,此模板应执行以下操作: