我正在阅读Box2D源代码。在b2Vec2
中,()
运算符被重载,但我不明白它应该做什么。我阅读了手册和此方法的参考,但仍然没有得到Read from an indexed element
和write to an indexed element
的含义,并且两种方法都具有相同的正文return (&x)[i]
。这是什么意思和做法?
答案 0 :(得分:0)
感谢先前的评论(但由于某种原因被删除),我得到了一个想法并对其进行了测试,结果证明这将允许我分别使用索引0和1来访问和写入x和y。
例如:
#include <iostream>
using namespace std;
class clazz {
public:
float x, y;
clazz(float x_, float y_) : x(x_), y(y_) {}
float operator () (int i) const {
return (&x)[i];
}
float& operator () (int i) {
return (&x)[i];
}
};
int main() {
clazz f (3, 4);
cout << "f: x = " << f(0) << " y = " << f(1) << endl; // printed => f: x = 3 y = 4
f(0) = 6;
f(1) = 6;
cout << "f: x = " << f(0) << " y = " << f(1) << endl; // printed => f: x = 6 y = 6
return 0;
}
答案 1 :(得分:0)
正如您所发现的那样,它是向量类中各个元素的访问函数。有两个函数的原因是const函数需要访问元素的值而无需修改它。请注意,您也可以在此返回const引用,但在您的情况下这不是必需的,因为它在浮点数上运行。
希望有一些断言可以确保代码没有超出范围索引,因为这很容易做到,特别是当你使用像示例中的签名变量时。