在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