C ++ std :: intializer_list和构造函数

问题描述

我正在尝试创建一个与向量“组”一起使用的函数

让这些组分别命名为ABC,...可以有任意数量的组。每个组都有一个“主”向量,例如。类型v_A的{​​{1}}和可变数量的关联向量,例如intv_A1,...全部为v_A2类型。

我希望创建一个函数float,该函数可以包含可变数量的组,每个组具有可变数量的元素,如下所示。

groupwise

在这里的嵌套初始化器列表的想法(如果那是我做的?)不起作用。我遇到的编译器错误是没有用于调用#include <vector> using std::vector; struct group_t { vector<int> x; vector<vector<float>> vv; group_t(vector<int> x,std::initializer_list<vector<float>> lv) : x(x) { // constructor for (auto v : lv) { vv.push_back(v); } } }; void groupwise(std::initializer_list<group_t> listofgroups) {} int main() { vector<int> v_A,v_B,v_C; vector<float> v_A1,v_A2,v_B1,v_B2,v_B3,v_C1; groupwise( // No matching function for call to 'groupwise' { v_A,{ v_A1,v_A2 } },{ v_B,{ v_B1,v_B3} },{ v_C,{ v_C1 } } ); } 的匹配函数

如何实现可以以最简单的方式调用的正确声明的函数groupwise?如果可能的话,我想避免在调用groupwise之前必须显式构造每组向量,而宁愿在对groupwise调用自动进行处理(正如我在此处通过构造函数groupwise

谢谢!

解决方法

您只需在函数调用中使用另一对大括号来指示最外面的initializer_list,如下所示:

groupwise({   // here
    { v_A,{ v_A1,v_A2 } },{ v_B,{ v_B1,v_B2,v_B3} },{ v_C,{ v_C1 } }
});  // and here

这里是demo