メンバ変数のアドレスを template に渡す
#include <iostream> template< typename class_t, typename type, type class_t::*member_ptr > struct member{ typedef type result_t; result_t& operator ()(class_t& rhs) const{ return rhs.*member_ptr; } }; struct vec_t{ float x, y, z; }; member<vec_t, float, &vec_t::x> at_x; member<vec_t, float, &vec_t::y> at_y; member<vec_t, float, &vec_t::z> at_z; int main(){ vec_t vec; at_x(vec) = 0.0f; at_y(vec) = 1.0f; at_z(vec) = 2.0f; std::cout << at_x(vec) << ", " << at_y(vec) << ", " << at_z(vec) << std::endl; return 0; }
[出力]
0, 1, 2
にゃんと!こんな事も出来るのか…。