【发布时间】:2020-10-05 13:58:35
【问题描述】:
我正在尝试创建一个适用于“组”向量的函数。
让组命名为A、B、C,...可以有任意数量的组。每个组都有一个“主要”向量,例如。 v_A 类型为 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_B2, v_B3} },
{ v_C, { v_C1 } }
);
}
我在这里的嵌套初始化列表的想法(如果这是我所做的?...)不起作用。 No matching function for call to groupwise 是我得到的编译器错误。
如何实现一个正确声明的函数groupwise,可以用最简单的方式调用?如果可能的话,我想避免在调用groupwise 之前明确地构造每组向量,并且宁愿在调用groupwise 时自动处理这些问题(正如我在这里通过group_t 的构造函数所打算的那样) .
谢谢!
【问题讨论】:
标签: c++ constructor parameter-passing