如何使用可变长度序列容器的内容初始化结构内部的std :: array字段?

Bartvbl

我有一个结构,它的简化形式如下:

struct Flags {
    const std::array<unsigned int, 8> flags;

    Flags(std::vector<unsigned int> initialFlagValues) : flags(initialFlagValues) {}
};

当然不编译。就我的程序而言,我想flags根据std::vector传入结构的构造函数的参数(,C样式数组或其他)的长度来初始化中的任意数量的元素

现在,我想std::array在struct内部使用,因为struct本身被创建了很多次(因此std::vector,由于许多分配/取消分配,这里a并不理想),但是flags其中需要初始化的值的数量并不总是相同。

有没有一种方法可以flags根据作为参数传递给构造函数的序列容器的大小来初始化特定数量的字段

j6t

使用辅助函数,也许以lambda的形式:

Flags(std::vector<unsigned int> initialFlagValues) :
    flags([](const auto& init) {
             std::array<unsigned int, 8> flags;
             // bounds check omitted for brevity
             std::copy(init.begin(), init.end(), flags.begin());
             return flags;
         }(initialFlagValues))
{}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何同时使用可变字段和不可变字段初始化结构?

如何使用反射初始化结构值字段?

使用嵌套的初始化程序列表聚合子对象的std :: array的初始化

使用初始化列表初始化结构,对于 std::array 失败

在函数内部初始化std :: array

初始化结构的字段

如何使用指向另一个字段的字段初始化结构?

用隐含长度初始化std :: array

如何使用Lambda初始化字段

容器std :: array的列表初始化需要双括号

如何用零初始化结构的数组字段

C ++使用互斥量字段初始化结构

在C ++ 11中初始化结构的C ++ std :: array

是否可以初始化未命名结构的std :: array?

std::array 结构初始化器列表语法

如何声明用不同值内联初始化的结构的std :: array

如何使用函数的输出初始化const数组结构字段?

如何使用编译器生成的后备字段初始化结构

如何使用通用字段初始化匿名结构数组

如何使用构造函数初始化内部类的新字段?

初始化匿名结构中的字段

结构字段的默认初始化状态?

如何使用std :: array构造函数参数C ++列表初始化const std :: array成员

对象内部的未初始化字段

为什么不能使用嵌套的初始化程序列表初始化std :: array <std :: pair <int,int>,3>,但是std :: vector <std :: pair <int,int >>可以初始化?

初始化std :: array <>

可变长度字段的前导零

解码MIDI可变长度字段

初始化std :: array的std :: array