Box2D vector()运算符

时间:2014-01-10 21:45:27

标签: c++ vector operator-overloading box2d

我正在阅读Box2D源代码。在b2Vec2中,()运算符被重载,但我不明白它应该做什么。我阅读了手册和此方法的参考,但仍然没有得到Read from an indexed elementwrite to an indexed element的含义,并且两种方法都具有相同的正文return (&x)[i]。这是什么意思和做法?

2 个答案:

答案 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引用,但在您的情况下这不是必需的,因为它在浮点数上运行。

希望有一些断言可以确保代码没有超出范围索引,因为这很容易做到,特别是当你使用像示例中的签名变量时。