Говоря об списках атрибутов, я имею в виду общий список, который хранит дополнительную информацию для класса.Как бы вы реализовали списки атрибутов?
Простейший случай:
Класс имеет std::map<std::string, std::string>
. Первая строка называет атрибут (например, "Color"
), вторая строка описывает значение (например, "Yellow"
).
В этом примере другой класс, который использует эти атрибуты, должен проверить, существует ли на карте определенное имя-атрибут и затем проанализировать значение.
Однако это не лучшая концепция, говоря о производительности.
Как реализовать такой список атрибутов?
Есть ли какие-либо шаблоны дизайна или библиотеки, которые просто делают что-то подобное?
Меня особенно интересует C++ - способ сделать это, но если есть независимые от языка решения, отправьте их тоже.
Список атрибутов может использоваться в тех случаях, когда класс должен иметь динамические атрибуты, и пользователь не хочет наследовать для каждого атрибута.
Если это помогает, вы можете проверить мой другой вопрос, относящийся к этой теме:
Attributelists or inheritance jungle?
EDIT:
Конечно, я забыл какую-то информацию (благодаря комментариям):
Атрибуты могут быть применены к объектам , Для объектов одного и того же класса могут быть разные атрибуты. Атрибуты, которые может изменить объект (значение может меняться, могут быть добавлены/удалены атрибуты)
Надеюсь, это немного упростит его.
Являются ли эти «атрибуты» для каждого класса или они предназначены для каждого объекта? Возможно ли, что атрибуты могут меняться во время выполнения? Как вы собираетесь использовать атрибуты? Это интересный вопрос, но вы не указали требования к спискам атрибутов. –
В правом силико - вы разрабатываете это на основе ваших реальных требований к гибкости времени выполнения, использования памяти, производительности и т. Д. Это может быть карта enums/strings/ints/boost :: any to boost :: any, variant, abstract base классы и т. д., или если вы считаете, что ваш предыдущий вопрос о выборе между такими «списками атрибутов» и наследованием имеет значение, то это означает, что требования еще более неопределенны. –