По принцип имам клас, да кажем Parameter
, който има променлива get и set.
Също така имам базов клас, да кажем Vehicle
, който има метод registerParameter(...)
, който взема указател към функционален член като getter и указател към функционален член като setter. След това този метод трябва да запише тези два указателя в обект от параметърния клас и да хвърли този обект във вектор.
И накрая, но не на последно място, имаме производен клас, да речем Car
и извикваме registerParameter(...)
с низ "color"
като име на параметър и получател и сетер от този производен клас.
Пример в кода:
Файл с параметри
#ifndef BASE_H
#define BASE_H
#include "base.h"
class Parameter
{
std::string (Base::*get)();
void (Base::*set)(std::string);
};
#endif
Базов файл
#ifndef PARAMETER_H
#define PARAMETER_H
#include <vector>
#include "parameter.h"
class Base
{
public:
std::vector<Parameter> list;
void registerNew(std::string (Base::*get)(), void (Base::*set)(std::string))
{
Parameters parameter;
parameter.get = get;
parameter.set = set;
list.push_back(parameter);
}
};
#endif
Изведен файл
class Derived
{
public:
Derived derived()
{
registerNew(&getColor, &setColor);
}
std::string getColor()
{
return this->color;
}
std::string setColor(std::string newColor)
{
this->color = newColor;
}
private:
std::string color;
};
Мисля за това от дни и наистина се нуждая от решението до петък вечерта.
void*
, но тогава, когато искате да я използвате, ще трябва да я преобразувате правилно - person in need of help   schedule 03.07.2014std::function<void(std::string)>
иstd::bind
Derived*
. - person MSalters   schedule 03.07.2014