Make setter class type-safe. Eliminated void pointer.
This commit is contained in:
16
settable.hpp
16
settable.hpp
@@ -37,23 +37,19 @@ public:
|
||||
template<typename T>
|
||||
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<T*>(ptr);
|
||||
BOOST_ASSERT(ptrT != 0);
|
||||
|
||||
*ptrT = string2type::convert<T>(value);
|
||||
reference = string2type::convert<T>(value);
|
||||
}
|
||||
|
||||
void *ptr;
|
||||
T &reference;
|
||||
};
|
||||
|
||||
#define REGISTER_MEMBER(Type, Attribute) \
|
||||
this->register_setter<Type>(#Attribute, &Attribute);
|
||||
this->register_setter<Type>(#Attribute, this->Attribute);
|
||||
|
||||
class settable {
|
||||
public:
|
||||
@@ -66,7 +62,7 @@ public:
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void register_setter(const std::string &name, T *ptr) {
|
||||
void register_setter(const std::string &name, T &ptr) {
|
||||
typedef setter<T> specific_setter;
|
||||
|
||||
setter_ptr setter(new specific_setter(ptr));
|
||||
|
||||
Reference in New Issue
Block a user