По сути, у меня есть класс, скажем, Parameter
, в котором есть переменная get и set.
У меня также есть базовый класс, скажем, Vehicle
, который имеет метод registerParameter(...)
, который принимает указатель на функцию-член в качестве геттера и указатель на функцию-член в качестве установщика. Затем этот метод должен записать эти два указателя в объект класса параметров и поместить этот объект в вектор.
И последнее, но не менее важное: у нас есть производный класс, скажем, 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