让我们假设我具有以下结构:

struct Point
{double _x, _y;};
struct Segment
{Point _p1, _p2;};
typedef Point Segment::* const SegmentEnd;

现在,我要介绍的功能将根据所提供的SegmentEnd缩放段。这意味着更改与提供的SegmentEnd相反的坐标。我该怎么做?

这是我更改提供的SegmentEnd的代码,但是我需要更改相反的代码:
void scale(Segment& segment, SegmentEnd end, const double& scaleVal)
{
    Point& p(segment.*end);
    p._x = scaleVal*p._x;
    p._y = scaleVal*p._y;
}

最佳答案

您可以定义一个返回另一端的函数:

SegmentEnd opposite(SegmentEnd e)
{
    return e == &Segment::_p1 ? &Segment::_p2 : &Segment::_p1;
}

// ...
Point& one(segment.*end);
Point& other(segment.*opposite(end));

10-08 07:55