2

我正在尝试制作一个数学库,并且想知道是否可以立即将矩阵乘以 uninitialised_list 而不是首先将其包装在向量中。

我想得到这样的东西。

 Matrix<double> M = {{1, 1}, {2, 2}};
 vector<double> v = M * {2.0, 2.0};

矩阵初始化工作得很好。所以矩阵 M 是一个 2x2 矩阵。我想将此 M 乘以向量 {2.0, 2.0} 但是我得到了跟随错误。

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;
}
4

1 回答 1

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
于 2013-11-09T16:02:16.237 回答