【问题标题】:Boost foreach and operator overloading提升 foreach 和运算符重载
【发布时间】:2011-05-16 18:29:45
【问题描述】:

我正在学习 boost,我想重写我的 Matrix 课程。我想使用 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: 非法使用这种类型作为 表达

有什么办法可以解决吗?

【问题讨论】:

  • 运算符的赋值形式返回引用更为惯用,而您返回的是*this的副本。

标签: c++ boost operators operator-overloading


【解决方案1】:

您需要使用参考(基于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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-19
    • 2012-09-19
    • 2012-11-26
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多