让我们假设我具有以下结构:
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));