std :: initializer_list as std :: array constructor

时间:2016-02-18 17:46:41

标签: 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 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 };           
    }
};

我尝试使用initializer_list大小初始化数组但没有任何作用(源代码的注释部分)只有常量{5,2,3,4,5,6,7,8,9,10}部分< / p>

有人知道原因和解决方法吗?

此致 Matyro

编辑1:主要问题是TStack(在大多数情况下)没有默认构造函数,所以我需要在构造时初始化数组

1 个答案:

答案 0 :(得分:4)

使用a

std::initializer_list

DEMO

使用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; };

std::array

DEMO 2