Раскрывающийся текст
class base {
public:
typedef bool(*sp)(int);
typedef int(*gp)();
typedef std::pair<sp, gp> prop;
typedef std::map<std::string, prop> PropertyMap;
public:
base() {}
virtual ~base() {}
public:
bool setProperty(const char* name, int value) {
std::string str(name);
PropertyMap::const_iterator i = propMap.find(str);
((i->second).first)(value);
return true;
}
int property(const char* name) const {
std::string str(name);
PropertyMap::const_iterator i = propMap.find(str);
return ((i->second).second)();
}
protected:
PropertyMap propMap;
bool register_property(const char* name, sp setprop, gp getprop) {
return propMap.insert(std::make_pair(std::string(name), prop(setprop, getprop))).second;
}
};
class base1 : public base
{
public:
base1() {
//register_property("TEST",&base1::setTestProp, &base1::getTestProp()); //< ??? Проблема здесь
}
bool setTestProp(int val) {
return true;
}
int getTestProp() {
return 125;
}
};
Весь затык в том, что в базовый класс надо передать указатели на не статические методы классов потомков.
Как можно решить эту проблему?
Можно конечно для каждого метода делать,что-то вроде
static int call_getTestProp(base1& param) {
return param.getTestProp();
}
и передавать указатель уже этого методаНо тогда весь смысл в свойствах теряется.
Как быть?
Кто-нибудб делал что-то подобное. Может есть другой способ реализации PROPERTY?