Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用成员数组初始化初始化器列表时间成员容器_Arrays_Templates_C++11_Constructor_Initialization - Fatal编程技术网

Arrays 使用成员数组初始化初始化器列表时间成员容器

Arrays 使用成员数组初始化初始化器列表时间成员容器,arrays,templates,c++11,constructor,initialization,Arrays,Templates,C++11,Constructor,Initialization,我试图使用成员变量数组实现类成员容器初始化示例代码: //Pseudo container declaration class CContainer { template<size_t nSize> CContainer(CMember* acArray[nSize]); }; //class whos members i wanna pass as array to container initialization class CProblematic {

我试图使用成员变量数组实现类成员容器初始化示例代码:

//Pseudo container declaration
class CContainer
{
    template<size_t nSize>
    CContainer(CMember* acArray[nSize]);
};
//class whos members i wanna pass as array to container initialization
class CProblematic
{
    CMember m_1;
    CMember m_2;
    ...
    CMember m_n;
    CContainer m_cContainer;

    //constructor with container initialization
    CProblematic(int parameter)
    : m_1(parameter)
    , m_2(parameter)
    ...
    , m_n(parameter)
    , m_cContainer({&m_1, &m_2, ... , &m_n})
    {}
};
//伪容器声明
类容器
{
模板
c容器(c成员*acArray[nSize]);
};
//类我要作为数组传递给容器初始化的whos成员
类问题
{
C成员m_1;
c成员m_2;
...
成员m_n;
集装箱m_集装箱;
//具有容器初始化的构造函数
CProblematic(int参数)
:m_1(参数)
,m_2(参数)
...
,m_n(参数)
,m_cContainer({&m_1,&m_2,…,&m_n})
{}
};
我尝试了多容器构造函数语法,但似乎没有任何帮助,例如,我尝试使用
CContainer(CMember**apcArray,size\u t nSize
并在
CProblematic
构造期间传递它,但在使用
{…}时,non似乎有帮助
style数组创建,也许有人能指出我的错误或解决方案


我知道解决这个问题最简单的方法就是简单地为每个成员添加构造函数body
m\u cContainer.add(&m\u 1)
,但我更感兴趣的是是否有一个解决方案可以用这种方式初始化…

似乎找到了一个解决方案,如果有人遇到同样的问题,这里是我的解决方案

//problematic constructor 
CProblematic(int parameter)
    : m_1(parameter)
    , m_2(parameter)
    ...
    , m_n(parameter)
    //only drawback, you must specify n by hand
    , m_cContainer(std::array<CMember*, n>{&m_1, &m_2, ... , &m_n})
    {}

//Container constructor
template<size_t nSize>
CContainer(std::array<CMember*, nSize>&& aArray) 
//since we're creating rvalue reference in initialization list
//有问题的构造函数
CProblematic(int参数)
:m_1(参数)
,m_2(参数)
...
,m_n(参数)
//唯一的缺点是,您必须手动指定n
,m_cContainer(std::数组{&m_1,&m_2,…,和m_n})
{}
//容器构造函数
模板
CContainer(标准::数组和aArray)
//因为我们正在初始化列表中创建右值引用

在实现解析的编译器上,您可以执行以下操作

template<size_t nSize>
CContainer(CMember* const (&acArray)[nSize]); // or CMember* (&&acArray)[nSize]
然后做
m\u容器(制作数组(&m\u 1,&m\u 2,…,&m\u n))
,构造函数采用
std::array
类似于您的答案:

template<size_t nSize>
CContainer(std::array<CMember*, nSize>&& aArray) 
模板
CContainer(标准::数组和aArray)
template<size_t nSize>
CContainer(std::array<CMember*, nSize>&& aArray)