■
[C/C++] GILの解析中
GILのutilities.hppで発見したコード.
template <typename T> class point2 { public: typedef T value_type; template <std::size_t D> struct axis { typedef value_type coord_t; }; static const std::size_t num_dimensions=2; point2() : x(0), y(0) {} point2(T newX, T newY) : x(newX), y(newY) {} point2(const point2& p) : x(p.x), y(p.y) {} ~point2() {} // 略 const T& operator[](std::size_t i) const { return this->*mem_array[i]; } T& operator[](std::size_t i) { return this->*mem_array[i]; } T x,y; private: static T point2<T>::* const mem_array[num_dimensions]; }; template <typename T> T point2<T>::* const point2<T>::mem_array[point2<T>::num_dimensions] = { &point2<T>::x, &point2<T>::y };
mem_arrayはoperator[]の実装にのみ使われているのだけれど,これは安全性の為らしい.
良く分かっていないのは
T point2<T>::*
という書き方.
分かることは
- これによってstaticでないメンバ変数のアドレスを利用できるようになる
- staticが付いていながら静的メンバ変数ではない
ということ.
こういうコードを調べようと思ったときってどうやって検索とかすれば良いんだろう??