Мне нужно сохранить список различных свойств объекта. Свойство состоит из имени и данных, которые могут быть любого типа данных.
Я знаю, что могу создать класс "Свойство" и расширить его с помощью разных PropertySubClasses, которые отличаются только типом данных, который они хранят, но это не кажется правильным.
class Property
{
Property(std::string name);
virtual ~Property();
std::string m_name;
};
class PropertyBoolean : Property
{
PropertyBoolean(std::string name, bool data);
bool m_data;
};
class PropertyFloat : Property
{
PropertyFloat(std::string name, float data);
float m_data;
};
class PropertyVector : Property
{
PropertyVector(std::string name, std::vector<float> data);
std::vector<float> m_data;
};
Теперь я могу хранить все виды свойств в
std::vector<Property*>
и чтобы получить данные, я могу применить объект к подклассу. Или я могу сделать чистую виртуальную функцию, чтобы что-то сделать с данными внутри функции без необходимости кастинга.
В любом случае, это не кажется правильным создавать эти различные типы подклассов, которые отличаются только типом данных, который они хранят. Есть ли другой удобный способ добиться подобного поведения?
У меня нет доступа к Boost.