我想制作一个数学库,并且想知道是否可以直接将uninitialised_list乘上一个矩阵,而不是先将它包装在一个向量中。将矩阵乘以一个initializer_list是否可能?
我想获得像这样的东西。
Matrix<double> M = {{1, 1}, {2, 2}};
vector<double> v = M * {2.0, 2.0};
矩阵初始化工作得很好。所以Matrix M是一个2x2矩阵。我想用矢量{2.0,2.0}乘这个M,但是我得到了跟随误差。
error: expected primary-expression before '{' token
vector<double> v = M * {2.0, 2.0};
我的问题是这实际上可能在c + +?
我的重载操作符*将接受initializer_list如下。
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;
}
我认为这是不允许的语法。然而,'M.operator *({2.0,2.0})'应该可以工作。 – dyp
然而,这并不直观...... – Montaldo
或者,'使用ili = std :: initializer_list; auto v = M * ili {2.0,2.0};'(或者通过推导'int','auto v = M * deduce({2.0,2.0});') –
dyp