基本上,我想做的是能够使用像这样的原语列表来构造一个对象:
int main()
{
// C primitives initialization list
int matrix[2][2] = { { 1, 2 }, { 2, 3 }, };
// C++ stl class initialization list
std::string s = { 'f', 'o', 'o' '\0' };
// My custom 2x2 Matrix subclass
Matrix2<int> mat = { { 2, 0 }, { 6, 7 } }; // is it possible?
}
字符串
我试过使用这个帖子中的声明,但是没有成功
第一个月
template <class T, unsigned int M, unsigned int N> class Matrix {
// Matrix(initializer_list<T> &&lst) : _First(nullptr), _Last(nullptr) {} // (1) Does not work
Matrix(std::initializer_list<T> &&lst) { } // (2) no error on definition itself
}
template <class T> class Matrix2 : public SquareMatrix<T, 2> {};
型
**(1):**由于以上clang错误,无法工作:clang: Member initializer '_First' does not name a non-static data member or base class [mem_init_not_member_or_class]
个
**(2):**也不工作,因为Matrix
和Matrix2
构造时出错:
clang: Too few template arguments for class template 'Matrix' [template_arg_list_different_arity]
个clang: No viable conversion from 'int' to 'Matrix<int, 2, 2>' [typecheck_nonviable_condition]
个
为了简化问题,我省略了主要代码full code can be found here
2条答案
按热度按时间6za6bjd01#
您可以将其编码为
std::initializer_list<std::initializer_list<T>>
:字符串
bmvo0sr52#
{..}
没有类型,它不是std::initializer_list
。{..}
禁止除std::initializer_list
和C数组类型以外的大多数演绎。std::initializer_list
最多用于“未知”大小。对于matrix 2x2,C-array似乎更合适(大小可能在编译时检查):
字符串