通过引用传递临时对象

Passing temporary objects by reference

我有两个类: 圆和点

Class Circle包含一个Dot,Dot包含一个int。 Circle 有一个 getDot() 函数,Dot 有一个 lessThan(Dot& ) 函数。

我想根据 Dot 中的 int 值对 Circles 数组 elems[] 进行排序。如果我有一个要与数组中的某个值进行比较的 Circle circ,我基本上需要一条执行以下操作的行:

elems[0].getDot().lessThan(circ.getDot())

但它不会编译...我可以通过临时解决这个问题

Dot dt = circ.getDot()

并通过

elems[0].getDot().lessThan(dt)

但这似乎是不必要的复制。有没有更有效的方法来解决这个问题?

很遗憾,我仅限于使用 lessThan(dot&) 进行比较,但我可以修改其中的内容。

编译错误为: 错误:从“Dot”类型的右值 cout< 对“Dot&”类型的非常量引用进行无效初始化

示例:

#include <vector>
#include <algorithm>

struct Dot
{
    Dot(int i) : value_(i) {}
    bool lessThan(Dot const& other) const
    {
        return value_ < other.value_;
    }

    int value_;
};

struct Circle
{
    Circle(Dot dot = Dot(0))
    : dot_(dot)
    {
    }

    const Dot& getDot() const { return dot_; }

    Dot dot_;
};


void sortCircles(std::vector<Circle>& circles)
{
    auto order = [](Circle const& l, Circle const& r)
    {
        return l.getDot().lessThan(r.getDot());
    };
    std::sort(circles.begin(), circles.end(), order);
}