diff --git a/settable.hpp b/settable.hpp index 3a9f975..1ec95b2 100644 --- a/settable.hpp +++ b/settable.hpp @@ -37,23 +37,19 @@ public: template class setter: public abstract_setter { public: - setter(void *p) - : ptr(p) { - BOOST_ASSERT(ptr != 0); + explicit setter(T &object) + : reference(object) { } virtual void set_value(const std::string &value) { - T *ptrT = static_cast(ptr); - BOOST_ASSERT(ptrT != 0); - - *ptrT = string2type::convert(value); + reference = string2type::convert(value); } - void *ptr; + T &reference; }; #define REGISTER_MEMBER(Type, Attribute) \ - this->register_setter(#Attribute, &Attribute); + this->register_setter(#Attribute, this->Attribute); class settable { public: @@ -66,7 +62,7 @@ public: } template - void register_setter(const std::string &name, T *ptr) { + void register_setter(const std::string &name, T &ptr) { typedef setter specific_setter; setter_ptr setter(new specific_setter(ptr));