可以将Matrix与initializer_list相乘吗?

时间:2013-11-09 15:49:32

标签: c++ templates

我正在尝试创建一个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;
}

1 个答案:

答案 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