其他分享
首页 > 其他分享> > 在C中得到相反的结构域

在C中得到相反的结构域

作者:互联网

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

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

标签:pointer-to-member,c
来源: https://codeday.me/bug/20190828/1749358.html