std::initializer_list 作为 std::array 构造函数
std::initializer_list as std::array constructor
我需要将参数传递给包装器 class,它看起来像这样的最小示例:
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} 部分
有人知道原因和解决方法吗?
此致
马蒂罗
编辑 1:主要问题是 TStack(在大多数情况下)没有默认构造函数,所以我需要在构造时初始化数组
与std::initializer_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;
};
与std::array
:
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;
};
我需要将参数传递给包装器 class,它看起来像这样的最小示例:
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} 部分
有人知道原因和解决方法吗?
此致 马蒂罗
编辑 1:主要问题是 TStack(在大多数情况下)没有默认构造函数,所以我需要在构造时初始化数组
与std::initializer_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;
};
与std::array
:
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;
};