У меня возникла проблема с дизайном, с которой, я надеюсь, вы, ребята, сможете помочь.У меня есть несколько разных классов, которые имеют различные параметры (более 20 в каждом случае, и они в основном разные, хотя некоторые абсолютно одинаковы, и в этом случае они наследуются от базового класса).Я хочу управлять этими параметрами через пользователя класса ObjectProperties.Каждый класс будет создавать ObjectProperties и заполнять его собственным списком параметров при инициализации класса.Это делается с помощью карты, настроенной следующим образом:
std::map<std::string, [data_type]> // where [data_type] can be an int, float, bool, string etc.
«строка» - это имя параметра, а тип данных - это тип, с которым он связан.Это будет сделано позже для облегчения написания сценариев (вместо 20+ получателей / установщиков).Я уже создал класс ObjectProperties, но он не идеален.У меня есть структура со всеми возможными типами данных с именем DataTypeStruct и переменная для карты в классе ObjectProperties с именем pDataTypeMap;
typedef struct
{
int* IntValue;
float* FloatValue;
bool* BoolValue;
std::string* StringValue;
}DataTypeStruct;
std::map<std::string, DataTypeStruct> pDataTypeMap;
Когда класс хочет добавить параметр для манипуляции, он вызывает один изследующие функции, которые затем соответствующим образом создают новую структуру и соединяют ее с именем, которое нужно поместить на карту.Функция возвращает true или false в зависимости от того, была ли она в состоянии вставить его или нет (если false, то имя уже существует)
bool AddParam(std::string aName, int* aParam);
bool AddParam(std::string aName, float* aParam);
bool AddParam(std::string aName, bool* aParam);
bool AddParam(std::string aName, std::string* aString);
Причина aParam состоит в том, что указателипотому что требуется, чтобы параметры передавались по ссылке, чтобы ими можно было управлять позже.
Для изменения значения параметра у меня есть аналогичные функции.Как вы можете видеть, это не идеально, так как я потратил некоторое пространство со структурой (где каждая новая структура хранит только int, или bool, или строку, или float), и вызов перегруженных функций небезопасен (я могу«сделать так, чтобы функции имели уникальные имена, но опять же, это не идеально».
Я надеюсь, что объяснил проблему дизайна, с которой я столкнулся (это немного сложно объяснить), и очень хотел быуслышать предложения о том, как решить эту проблему.