2014-01-10 39 views
0

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

回答

0

多亏了之前的评论(但它是出于某种原因删除),我有一个想法,并测试了它,而且事实证明,这将允许我访问和写入分别对应于x和y使用索引0和1 。

例如:

#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; 
} 
0

当你发现它是一个访问函数在向量类中的各个元素。有两个函数的原因是由于const函数需要访问元素的值而不需要修改它。请注意,您也可以在这里返回一个const引用,但这并不是必要的,因为它在浮点操作。

希望有断言到位确保代码不会索引超出了范围,因为这是很容易做到的,尤其是当你已经在你的例子使用符号变量等。