促进foreach和运算符重载

时间:2011-05-16 18:29:46

标签: c++ boost operators operator-overloading

我正在学习提升,我想重写我的Matrix课程。而不是for循环我想使用BOOST_FOREACH,但是我遇到了运算符重载的一些问题。

这是重载运算符/ =

的原始版本
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:非法使用此类型   表达

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:3)

您需要使用引用(基于http://www.boost.org/doc/libs/1_39_0/doc/html/foreach.html处的示例)。此外,您错过了一个return语句:

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