Хранение разнородных объектов в контейнерах C
Контейнерам C обычно требуются однородные элементы, то есть они могут хранить только объекты одного типа. Однако бывают ситуации, когда вам может понадобиться контейнер, способный вместить разные типы данных. В этой статье рассказывается, как добиться этого с помощью библиотеки boost::any и специального подхода.
Использование boost::any
boost::any — это класс-шаблон. который может содержать любой тип C. Сохраняя экземпляры boost::any в контейнере, вы можете получить разнородную коллекцию объектов. Этот подход рекомендуется из-за его надежности и возможности обработки крайних случаев.
Пользовательская реализация
Если вы предпочитаете более ручной подход, вы можете создать собственную структуру или объединение, которое объединяет элементы всех ожидаемых типов вместе с индикатором для указания активного типа.
Структура Подход:
struct HeterogeneousContainer {
int i;
std::string s;
double d;
int type; // 0 for int, 1 for string, 2 for double
};
Union Approach (используйте с осторожностью):
union HeterogeneousContainer {
int i;
std::string s;
double d;
};
Однако у этого подхода есть ограничения и потенциальные ловушки, такие как:
Вывод
Когда возникает необходимость хранить разнородные объекты в контейнере C, рассмотрите возможность использования библиотеки boost::any из соображений ее безопасности и эффективности. . При желании можно создать собственную реализацию с использованием структуры или объединения, но помните об их ограничениях.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3