请帮我理解来自Facebook Pop的代码片段:PopVector.h
模板类
Vector2
包含一个静态成员_v
,看起来是Vector2
实例的支持数据。private:
typedef T Vector2<T>::* const _data[2];
static const _data _v;
_v
是由以下代码实例化的:
template<typename T>
const typename Vector2<T>::_data Vector2<T>::_v = { &Vector2<T>::x, &Vector2<T>::y };
然后使用_v
来实现索引操作符:
const T& operator[](size_t i) const { return this->*_v[i]; }
T& operator[](size_t i) { return this->*_v[i]; }
我对这种代码模式不熟悉,有几个问题:
- typedef行的含义是什么?我不理解
Vector2<T>::*
- _v为什么必须是静态成员?它似乎在实例之间不共享,这与C ++中的静态语义不符。
x
和y
命名,但也允许通过索引访问。_v
包含两个指针,它们提供了一种访问任意Vector2
的x
和y
元素的方式。成员指针与模板无关,同样可以在非模板中使用。 - Mankarse