问题描述
让这些组分别命名为A
,B
,C
,...可以有任意数量的组。每个组都有一个“主”向量,例如。类型v_A
的{{1}}和可变数量的关联向量,例如int
,v_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。