Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Miscellaneous Notes

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 42. Boost.Variant

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Miscellaneous Notes

Boost.Variant vs. Boost.Any

Как дискриминируемый профсоюзный контейнер, библиотека Variant разделяет многие из тех же особенностей библиотеки Any. Однако, поскольку ни одна библиотека полностью не инкапсулирует особенности другой, одна библиотека не может быть обычно рекомендована для использования над другой.

Это сказал: "Боуст". Вариант имеет несколько преимуществ перед Boost. Любые, такие как:

  • Подъем. Вариант гарантирует, что тип его контента является одним из конечного, определяемого пользователем набора типов.
  • Boost.Variant предоставляет compile-time проверенное посещение его содержания. (С другой стороны, текущая версия Boost. Любой не предоставляет механизма посещения вообще; но даже если это так, его нужно будет проверить в режиме ожидания.)
  • Подъем. Вариант позволяет общее посещение его содержания. (Даже если подогнать. Любой из них предоставляет механизм посещения, он позволяет посещать только специально определенные типы.)
  • Подъем. Variant предлагает эффективную схему хранения на основе стека (избегая накладных расходов динамического распределения).

Конечно, "Боуст". Любой имеет несколько преимуществ перед Boost. Разнообразные, такие как:

  • Подъем. Любое, как подразумевает его название, позволяет практически любой тип для его содержания, обеспечивая большую гибкость.
  • Подъем. Любое лицо предоставляет гарантию безопасности исключений для своей операции по обмену.
  • Подъем. Любой из них мало использует методы метапрограммирования шаблонов (избегая потенциально труднодоступных сообщений об ошибках и значительных требований процессора и памяти).

Portability

Библиотека предназначена для 100% соответствия ANSI/ISO C++. Тем не менее, это строго невозможно из-за неотъемлемо непортируемого характера объекта библиотеки Type Traits type_with_alignment. На практике, однако, не было обнаружено никаких компиляторов или платформ, где эта зависимость от неопределенного поведения была проблемой.

Кроме того, были предприняты значительные усилия для обеспечения надлежащего функционирования, несмотря на различные ошибки компиляторов и другие проблемы соответствия. На сегодняшний день библиотечные тесты были составлены и успешно протестированы по крайней мере на следующих компиляторах для основной и продвинутой функциональности:

  Basic variant<T&> make_variant_over make_recursive_variant
Borland C++ 5.5.1 и 5.6.4 X X    
Comeau C++ 4.3.0 X X X X
GNU GCC 3.3.1 X X X X
GNU GCC 2.95.3 X X   X
Intel C++ 7.0 X   X X
Metrowerks CodeWarrior 8.3 X   X X
Microsoft Visual C++ 7.1 X X X X
Microsoft Visual C++ 6 SP5 и 7 X      

Наконец, текущее состояние теста в CVS можно найти на странице Test Summary. Однако, пожалуйста, обратите внимание, что эта страница сообщает о ежедневных изменениях в межрелизном коде, найденном в Boost CVS, и, следовательно, вероятно, не соответствует состоянию кода, обнаруженного в Boost-релизах.

Troubleshooting

Из-за интенсивного использования шаблонов в реализации variant, это не редкость при компиляции, чтобы столкнуться с проблемами, связанными с глубиной шаблона, памятью компилятора и т. Д. В этом разделе делается попытка дать советы общим проблемам, с которыми сталкиваются несколько популярных компиляторов.

(Этот раздел все еще находится в стадии разработки, с дополнительными рекомендациями/отзывами. Пожалуйста, отправьте в список Boost-Users с любым полезным опытом, который вы можете иметь.)

"Template instantiation depth exceeds maximum"

GNU GCC

Вариант компилятора -ftemplate-depth-N может увеличить максимально допустимую глубину мгновенных данных. (Try -ftemplate-depth-50.)

"Internal heap limit reached"

Microsoft Visual C++

Вариант компилятора /ZmNNN может увеличить лимит распределения памяти. NN - это процент масштабирования (т.е. 100 обозначает предел по умолчанию). (Try /Zm200.)

Acknowledgments

Эрик Фридман и Итей Маман разработали первоначальное представление; Эрик был основным исполнителем.

Эрик также является хранителем библиотеки и расширился после первоначального представления - добавив make_recursive_variant, make_variant_over, поддержку исходного контента и т.д.

Работы Андрея Александреску в [Ale01a] и [Ale02] вдохновили дизайн библиотеки.

Джефф Гарланд был официальным менеджером по обзору.

Дуглас Грегор, Дэйв Абрахамс, Энтони Уильямс, Фернандо Качиола, Джоэл де Гузман, Дирк Шрейб, Брэд Кинг, Джованни Баджо, Юджин Гладышев и другие предоставили полезные отзывы и предложения по уточнению семантики, интерфейса и реализации библиотеки.


PrevUpHomeNext

Статья Miscellaneous Notes раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 42. Boost.Variant может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 42. Boost.Variant ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:58:52/0.0095329284667969/1