让我们假设我有以下结构:
String bucketName = "xxxx.appspot.com";
GcsService gcsService = GcsServiceFactory.createGcsService();
gcsService.delete(new GcsFilename(bucketName,"images/123.jpg"));
现在我想介绍一个函数,该函数可以根据提供的struct Point
{double _x, _y;};
struct Segment
{Point _p1, _p2;};
typedef Point Segment::* const SegmentEnd;
来缩放细分。这意味着改变与提供的SegmentEnd
相反的坐标。我该怎么办?
以下是我更改提供的SegmentEnd
所做的代码,但我需要更改相反的代码:
SegmentEnd
答案 0 :(得分:3)
您可以定义一个返回另一端的函数:
{{1}}
答案 1 :(得分:1)
如果你要求的是访问另一个成员(你没有提供的那个成员作为参数),你可能会做一些比较你发送的元素的地址,比如_p1,如果匹配的话你知道你想要访问_p2而不是等等。但如果你想要一点点的可读性,你应该以另一种方式解决你的问题。
我从未遇到指向成员访问操作符可以改进我的代码的情况,我相信通过阅读你的帖子不会改变。
编辑: 所以另一个答案是在问题的评论中(ninjad by Francois),使用enum或bool参数来判断操作的结束。
答案 2 :(得分:1)
你不能简单地做一些事情:
void scale(Segment& segment, bool inverted, const double& scaleVal)
{
if (!inverted) {
// scale segment._p1 with respect to segment._p2
} else {
// scale segment._p2 with respect to segment._p1
}
}
然后你甚至不需要指向成员的指针。
param可以是枚举("方向")等等。
您可能会争辩说,使用指向成员的指针,您希望保存分支,但在您的情况下情况并非如此,因为您仍需要检查地址以确定已发送的点。
您可以通过提供两个点来保存分支,缩放的点和另一个作为参考:
void scale(Segment& segment, SegmentEnd scaled, SegmentEnd reference, const double& scaleVal)
{
// scale segment.*scaled with reflect to segment.*reference
}
并恰当地致电:
scale(segment, Segment::_p1, Segment::_p2, value);
scale(segment, Segment::_p2, Segment::_p1, value);
(或在这种情况下直接传递分数)