Box2D 矢量 () 运算符

Box2D vector () operator

本文关键字:运算符 矢量 Box2D      更新时间:2023-10-16

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

多亏了之前的评论(但由于某种原因它被删除了),我得到了一个想法并对其进行了测试,事实证明这将允许我分别使用索引 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;
}

正如你发现的那样,它是向量类中各个元素的访问器函数。有两个函数的原因是 const 函数需要访问元素的值而无需修改它。请注意,您也可以在此处返回 const 引用,但这在您的情况下不是必需的,因为它在浮点数上运行。

希望有断

言来确保代码不会超出范围,因为这很容易做到,尤其是当您使用像示例中这样的有符号变量时。