C++ c++;std::初始化器列表和构造函数

C++ c++;std::初始化器列表和构造函数,c++,constructor,parameter-passing,C++,Constructor,Parameter Passing,我正在尝试创建一个与向量“组”一起工作的函数 将组命名为A,B,C。。。可以有任意数量的组。每组有一个“主”向量,如int类型的v_A,以及一个数量可变的相关向量,如v_A1,v_A2。。。所有类型均为float 我希望创建一个函数groupwise,该函数可以采用不同数量的组,每个组具有不同数量的元素,如下所示 #include <vector> using std::vector; struct group_t { vector<int> x; ve

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

将组命名为
A
B
C
。。。可以有任意数量的组。每组有一个“主”向量,如
int
类型的
v_A
,以及一个数量可变的相关向量,如
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 } }
    );
}
#包括
使用std::vector;
结构组{
向量x;
向量vv;
组(向量x,std::初始值设定项列表lv):x(x){//constructor
用于(自动v:lv){
vv.推回(v);
}
}
};
void groupwise(std::initializer_list listofgroups){}
int main(){
向量v_A,v_B,v_C;
向量v_A1,v_A2,v_B1,v_B2,v_B3,v_C1;
groupwise(//没有匹配的函数用于调用“groupwise”
{v_A,{v_A1,v_A2},
{v_B,{v_B1,v_B2,v_B3},
{v_C,{v_C1}}
);
}
我这里的嵌套初始值设定项列表的想法(如果这是我所做的?…)不起作用。我得到的编译器错误是调用
groupwise
时没有匹配的函数

如何实现可以以最简单的方式调用的正确声明的函数
groupwise
?如果可能的话,我希望在调用
groupwise
之前避免显式构造每组向量,而是希望在调用
groupwise
时自动处理这些向量(正如我在这里通过
group\u t
的构造函数所打算的那样)


谢谢

您只需要在函数调用中使用另一对大括号来指示最外面的
初始值设定项列表,如下所示:

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

这是一个“./p>没有问题:”很快你就会习惯于这些事情,并且能够自己发现它:“禅也,如果回答了你的问题,就考虑接受这个答案。顺便说一句,@to-people怎么了,有时候你们可以用,有时候不行?是的,因为你们在评论我的帖子,我会自动得到通知。所以它忽略了@@zen•评论不应该用于扩展对话。因此,这样的“用例”可能被认为是不必要的。您可以在不使用@的情况下使用此人的姓名。(耸耸肩不是我的规则,只是StackOverflow作为问答论坛的一般规则。)