请帮助我了解来自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]; }
我对这种代码模式不熟悉,对此有一些疑问:
Vector2<T>::*
_v
必须成为静态成员?似乎它没有在实例之间共享,在C ++ AFAICT中不遵循静态语义。无论是在模板中还是在其他地方,::*
都是C ++令牌,仅在上下文class_name :: *中用于类型表达式中。它声明一个指向成员的指针。
在您的情况下,typedef表示这_data
是指向其成员Vector2<T>
具有type的const指针的别名T const[2]
。
编辑:
我得到的实际定义有误:_data
是指向Vector2<T>
type成员的const指针的array [2]的别名T
。这在实例化中很明显,在该实例化中,使用两个指向成员的指针来初始化对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句