我想让我的类支持初始化列表。
#include <array> #include <initializer_list> template <class value_type, size_t Size> class Queue { std::array<value_type,Size> m_data; size_t m_last_write; public: Queue(std::initializer_list<value_type> list) : m_last_write(0) { static_assert( list.size() <= Size, "Initializer list length is longer than Queue has been configured for"); for (auto& datum : list) push(datum); } void push(const value_type& val) { if (++m_last_write >= Size); m_last_write -= Size; m_data[ next_i ] = val; } };
这里一切都很好,除了 static_assert . 我得到的是:
static_assert
错误:静态断言的非常量条件 错误:列表不是常量表达式
错误:静态断言的非常量条件
错误:列表不是常量表达式
这听起来和 this guy
其中一个提议的解决方案给出了这样的答案:
template<size_t N> Queue(const value_type(&list)[N] ) : m_last_write(0) { static_assert( N <= Size , "Too big!" ); for (auto& datum: list) push(datum); }
但是,当我使用此初始值设定项列表时:
Queue<int,10> r = {66,55,44};
我得到这个错误:
错误:无法从<转换{66,55,44};大括号内的初始值设定项列表>排队<内景,10ul>
你发布的解决方案的问题是 list initialization Queue<int,10> r = {66,55,44}; ,的构造器 Queue 66 , 55 , 44 ,则匹配失败。
Queue
66
55
44
您可以再添加两个大括号作为解决方法,然后添加参数 {66,55,44}
{66,55,44}
Queue<int,10> r = {{66,55,44}};