У меня есть проблема, которую я не могу решить. Я попытался найти аналогичный вопрос здесь, но не нашел для меня рабочего решения.Функция автоматического возврата функции в C++
Моя структура:
class Base
{
unsigned int ID;
};
class Position: public Base
{
float x,y;
Position(float a, float b): x(a), y(b) {}
}
class Mass: public Base
{
float mass;
Mass(float a): mass(a) {}
}
хранить указатели на все атрибуты в карте accesed со строками. Я хотел бы иметь функцию, которая может возвращать любой атрибут из этого списка, используя имена. Структура и желаемая функциональность должна быть такой:
std::map<string, Base*> attributes;
???? getAtt(string name)
{
return attributes[name];
}
Position pos(1,2);
Mass mass(25.6);
attributes.emplace("TEST_POSITION", &pos);
attributes.emplace("TEST_MASS") &mass);
cout << "Mass of this object is " <<getAtt("TEST_MASS").mass << endl;
cout << "X - Position of this object is " << getAtt("TEST_POSITION").x ;
PRINTS: Mass of this object is 25.6
X - Position of this object is 1
Эта функция, добавление атрибутов и менеджер памяти должен быть инкапсулируют в другом классе, но я думаю, что привычка быть такой проблемой после того, как я получаю эту вещь решена. Так есть способ сделать это? Я думал о шаблонах, но я не понимаю их достаточно, чтобы заставить их работать :(Я думал о том, чтобы не хранить все атрибуты в одном массиве, но таким образом это очень просто. Спасибо за любые предложения :)
Вы намеренно смешиваете атрибуты разных типов? Часто бывает проще иметь несколько однородных контейнеров, чем один гетерогенный контейнер. – MSalters