C++ std::initializer\u作为std::数组构造函数列出

C++ std::initializer\u作为std::数组构造函数列出,c++,arrays,c++11,initializer-list,C++,Arrays,C++11,Initializer List,我需要将参数传递给一个包装器类,该类看起来像这样的最小示例: template<class TStack, unsigned int TBins> class Wrapper : Stack<......> { std::array<TStack, TBins> m_oStacks; template<typename ... Args> Wrapper(std::initializer_list<const uns

我需要将参数传递给一个包装器类,该类看起来像这样的最小示例:

template<class TStack, unsigned int TBins>
class Wrapper : Stack<......>
{
    std::array<TStack, TBins> m_oStacks;

    template<typename ... Args>
    Wrapper(std::initializer_list<const unsigned int> const& size, Args&&... args)
    : Stack<.......>(args), m_oStacks{5,2,3,4,5,6,7,8,9,10}
    //, m_oStacks(size) //,m_oStacks{size} //,m_oStacks{{size}}
    {
        //m_oStacks = { size };           
    }
};
模板
类包装器:堆栈
{
std::阵列m_支架;
模板
包装器(标准::初始值设定项\u列表常量和大小、参数和…参数)
:堆栈(args),m_oStacks{5,2,3,4,5,6,7,8,9,10}
//,m_oStacks(size)//,m_oStacks{size}//,m_oStacks{{size}
{
//m_oStacks={size};
}
};
我尝试使用初始值设定项_list size初始化数组,但没有任何效果(源代码的注释部分),只有常量{5,2,3,4,5,6,7,8,9,10}部分起作用

有人知道原因和解决办法吗

诚恳 马蒂罗


编辑1:主要问题是TStack(在大多数情况下)没有默认构造函数,因此我需要在构造时用
std::initializer\u list
初始化数组:

template <typename TStack, std::size_t TBins>
class Wrapper
{
public:
    Wrapper(std::initializer_list<unsigned int> il)
        : Wrapper(il, std::make_index_sequence<TBins>{})
    {
    }

private:
    template <std::size_t... Is>
    Wrapper(std::initializer_list<unsigned int> il, std::index_sequence<Is...>)
        : m_oStacks{{ *(il.begin() + Is)... }}
    {
    }

    std::array<TStack, TBins> m_oStacks;
};

@Matyro Class std::array没有接受初始值设定项列表的构造函数。您应该自己复制数组中的初始值设定项列表。使用
std::array
而不是
std::initializer\u list
,它也可以进行列表初始化,并且
std::array
本身确实有一个副本构造函数,该解决方案可以正常工作,但我并不这么认为。看起来不错。如果
il
的长度小于TBINS,则第一种情况会导致UB。
template <typename TStack, std::size_t TBins>
class Wrapper
{
public:
    Wrapper(const std::array<unsigned int, TBins>& a)
        : Wrapper(a, std::make_index_sequence<TBins>{})
    {
    }

private:
    template <std::size_t... Is>
    Wrapper(const std::array<unsigned int, TBins>& a, std::index_sequence<Is...>)
        : m_oStacks{{ a[Is]... }}
    {
    }

    std::array<TStack, TBins> m_oStacks;
};