5

有没有办法std::array在类的构造函数初始化器中填充一个?

现在我正在填充它很长的路要走:

class Matrix3x3 {
//...
private:
    std::array<double, 9> _indicies;
};
//...
Matrix3x3::Matrix3x3(double m00, double m01, double m02, double m10, double m11, double m12, double m20, double m21, double m22) : _indicies() {
    _indicies[0] = m00; _indicies[1] = m01; _indicies[2] = m02;
    _indicies[3] = m10; _indicies[4] = m11; _indicies[5] = m12;
    _indicies[6] = m20; _indicies[7] = m21; _indicies[8] = m22;
}

-编辑 -

Visual Studio 2010 没有完整的 c++11 支持(它仍然将 std::array 列为std::tr1::array命名空间的 typedef!)。

尝试包括:

1. Matrix3x3::Matrix3x3(const std::initializer_list<std::array<double, 9> >& row_column_values) : _indicies(row_column_values) { }
2. Matrix3x3::Matrix3x3(double m00, double m01, double m02, double m10, double m11, double m12, double m20, double m21, double m22) : _indicies({m00, m01, m02, m10, m11, m12, m20, m21, m22}) { }

这些都不适用于VS2010。他们都报告错误:

1. error C2664: 'std::tr1::array<_Ty,_Size>::array(const std::tr1::array<_Ty,_Size> &)' : cannot convert parameter 1 from 'const std::initializer_list<_Elem>' to 'const std::tr1::array<_Ty,_Size> &'
2. Cascading errors:
    error C2059: syntax error : ')'
    error C2143: syntax error : missing ')' before '{'
    error C2143: syntax error : missing ';' before '}'
    error C2447: '{' : missing function header (old-style formal list?)
4

3 回答 3

3

在 C++11 中,您可以使用花括号初始化器,如下所示:

Matrix3x3::Matrix3x3(double m00, double m01, double m02, double m10, double m11, double m12, double m20, double m21, double m22)
:   _indicies({m00, m01, m02, m10, m11, m12, m20, m21, m22}) {
}

ideone 上的演示。

于 2014-03-27T14:47:50.340 回答
0

这对我有用:

array<int, 4> arr;
arr = {1,2,3,4};

也许将您的代码更改为:

Matrix3x3::Matrix3x3(double m00, double m01, double m02, double m10, double m11, double m12, double m20, double m21, double m22) : _indicies({m00, m01, m02, m10, m11, m12, m20, m21, m22}) {}
于 2014-03-27T14:49:19.103 回答
0

这是一个通用构造函数

template<typename... A>
Matrix3x3(A&&... a) : _indicies{{std::forward<A>(a)...}} { }

这将接受最多 9 个可隐式转换为double(缩小除外)的初始化程序,就像std::array<double, 9>'s aggregate-initialization一样。

于 2014-03-27T14:54:09.243 回答