为操作员过载增压

Boost foreach and operator overloading

本文关键字:操作员      更新时间:2023-10-16

我正在学习boost,我想重写我的矩阵类。我想使用 BOOST_FOREACH 而不是 for 循环,但是我在运算符重载方面遇到了一些问题。

这是重载运算符的原始版本/=

template<typename T>
Matrix<T> Matrix<T>::operator /= ( double varValue)
{
    for (int i=0;i<this->rows;i++)
    {
        for (int j=0;j<this->columns;j++)
        {
            datavector.at(i).at(j) /= varValue;
        }
    }
    return *this;
}

我想将上面的代码更改为这样的东西

template<typename T>
Matrix<T> Matrix<T>::operator /= ( double varValue)
{
    BOOST_FOREACH(vector<T> row,datavector)
    {
        BOOST_FOREACH(T item,row)
        {
            item /= varValue;
        }
    }
}

但是我经常收到错误

T:非法使用此类为 表达

有什么办法可以解决这个问题吗?

您需要使用引用(基于 http://www.boost.org/doc/libs/1_39_0/doc/html/foreach.html 中的示例)。 此外,您缺少返回语句:

template<typename T>
Matrix<T> Matrix<T>::operator /= ( double varValue)
{
    BOOST_FOREACH(vector<T> &row,datavector)
    {
        BOOST_FOREACH(T &item,row)
        {
            item /= varValue;
        }
    }
    return *this;
}