C++ で簡単にアクセッサを書けるようにしたかったけど Non-static data members で auto が使えなくて死んだ
class X{ int value_ = 42; public: auto value = accessor(this, &X::value_); };
みたいな感じで書きたかった。
[ソース]
template<typename Class, typename T> struct accessor_impl{ Class* class_; T Class::* member; T operator ()() const{ return class_ ->* member; } void operator ()(T const& t) const{ class_ ->* member = t; } }; template<typename Class, typename T> accessor_impl<Class, T> accessor(Class* class_, T Class::* member){ return { class_, member }; } class X{ int value_ = 42; public: // auto value = accessor(this, &X::value_); accessor_impl<X, int> value{ this, &X::value_ }; }; #include <iostream> int main(){ X x; std::cout << x.value() << std::endl; x.value(72); std::cout << x.value() << std::endl; return 0; }
[出力]
42 72
つらい。