我正在尝试创建一个Math库,并且想知道是否可以直接将矩阵乘以uninitialised_list,而不是先将它包装在向量中。
我想获得这样的东西。
Matrix<double> M = {{1, 1}, {2, 2}};
vector<double> v = M * {2.0, 2.0};
矩阵初始化非常精细。所以Matrix M是一个2x2矩阵。我想将这个M乘以向量{2.0,2.0}但是我得到了跟随错误。
error: expected primary-expression before '{' token
vector<double> v = M * {2.0, 2.0};
我的问题是这在c ++中实际上是否可行?
我接受初始化列表的重载运算符*在下面。
template<typename T>
vector<T> Matrix<T>::operator*(const initializer_list<T> &list)
{
vector<T> result(list.size(), 0.0);
for (size_t i = 0; i < d_rows; ++i)
{
for (size_t j = 0; j < d_cols; ++j)
{
result[i] = d_matrix[i][j] * *(list + j);
}
}
return result;
}
答案 0 :(得分:0)
初始化应该用于初始化。我不是不可能,但有一些解决方法:
vector<T> Matrix<T>::operator*(std::initializer_list<double> a)
{
....
}
auto v = M * std::initializer_list<double>{2.0, 2.0};
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// Make an initialized object
然而,它不够适合和不够可读。我更喜欢下面代码:
auto v = M * Matrix<double>{2.0, 2.0};
^^^^^^^^^^^^^^^^^^^^^^^^^
// Initialized Matrix