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

Chapter 37. Boost.TypeErasure

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Part I. The Boost C++ Libraries (BoostBook Subset)

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

Chapter 37. Boost.TypeErasure

Steven Watanabe

Распространяется под лицензией Boost Software License, версия 1.0. (См. сопроводительный файл LICENSE_1_0.txt или копию по адресуhttp://www.boost.org/LICENSE_1_0.txt)

Таблица содержания

Introduction
How to read this documentation
Basic Usage
Composing Concepts
Functions with Multiple Arguments
Concepts in Depth
Defining Custom Concepts
Overloading
Concept Maps
Associated Types
Using Any
Construction
Conversions
References
Syntax Limitations
Examples
A polymorphic range formatter
A type-safe printf
Boost.Function with multiple signatures
Concept Definitions
Predefined Concepts
Reference
Header <boost/type_erasure/any.hpp>
Header <boost/type_erasure/any_cast.hpp>
Header <boost/type_erasure/binding.hpp>
Header <boost/type_erasure/binding_of.hpp>
Header <boost/type_erasure/builtin.hpp>
Header <boost/type_erasure/call.hpp>
Header <boost/type_erasure/callable.hpp>
Header <boost/type_erasure/check_match.hpp>
Header <boost/type_erasure/concept_interface.hpp>
Header <boost/type_erasure/concept_of.hpp>
Header <boost/type_erasure/config.hpp>
Header <boost/type_erasure/constructible.hpp>
Header <boost/type_erasure/deduced.hpp>
Header <boost/type_erasure/derived.hpp>
Header <boost/type_erasure/dynamic_any_cast.hpp>
Header <boost/type_erasure/dynamic_binding.hpp>
Header <boost/type_erasure/exception.hpp>
Header <boost/type_erasure/free.hpp>
Header <boost/type_erasure/is_empty.hpp>
Header <boost/type_erasure/is_placeholder.hpp>
Header <boost/type_erasure/is_subconcept.hpp>
Header <boost/type_erasure/iterator.hpp>
Header <boost/type_erasure/member.hpp>
Header <boost/type_erasure/operators.hpp>
Header <boost/type_erasure/param.hpp>
Header <boost/type_erasure/placeholder.hpp>
Header <boost/type_erasure/placeholder_of.hpp>
Header <boost/type_erasure/rebind_any.hpp>
Header <boost/type_erasure/register_binding.hpp>
Header <boost/type_erasure/relaxed.hpp>
Header <boost/type_erasure/require_match.hpp>
Header <boost/type_erasure/same_type.hpp>
Header <boost/type_erasure/static_binding.hpp>
Header <boost/type_erasure/tuple.hpp>
Header <boost/type_erasure/typeid_of.hpp>
Rationale
Why do I have to specify the presence of a destructor explicitly?
Why non-member functions?
Why are the placeholders called _a, _b and not _1 _2
Why not use boost::ref for references?
Future Work
Acknowledgements
Related Work

Начало. Библиотека TypeErasure обеспечивает полиморфизм времени выполнения на C++, который является более гибким, чем тот, который обеспечивается основным языком.

C++ имеет два различных вида полиморфизма, виртуальные функции и шаблоны, каждый из которых имеет свои преимущества и недостатки.

  • Виртуальные функции не решаются до времени выполнения, в то время как шаблоны всегда решаются во время компиляции. Если ваши типы могут варьироваться во время выполнения (например, если они зависят от пользовательского ввода), то статический полиморфизм с шаблонами не очень помогает.
  • Виртуальные функции могут использоваться с отдельной компиляцией. Корпус шаблона должен быть доступен в каждом блоке перевода, в котором он используется, замедляя компиляции и увеличивая перестройки.
  • Виртуальные функции автоматически выдвигают требования к аргументам. Шаблоны проверяются только тогда, когда они инстанцируются, что требует дополнительной работы в тестировании, утверждениях и документации.
  • Компилятор создает новую копию каждого шаблона функций каждый раз, когда он создается. Это позволяет лучше оптимизировать, потому что компилятор знает все статически, но это также вызывает значительное увеличение двоичных размеров.
  • Шаблоны поддерживают ценностную семантику. Объекты, которые «ведут себя как int» и не являются общими, легче понять. Для использования виртуальных функций, с другой стороны, необходимо использовать (умные) указатели или ссылки.
  • Библиотеки шаблонов могут позволять ненавязчиво адаптировать сторонние типы для бесшовной совместимости. С помощью виртуальных функций вам нужно создать обертку, которая наследуется от базового класса.
  • Шаблоны могут обрабатывать ограничения, включающие несколько типов. Например, std::for_Every принимает диапазон итератора и функцию, которую можно вызвать на элементах диапазона. Виртуальные функции не могут выражать такие ограничения.

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

Усиление включает в себя несколько особых случаев такого рода полиморфизма:

  • <boost::any>Копиконструируемые типы.
  • <boost::function>Для объектов, которые можно назвать функциями.
  • Повышаю. Диапазон обеспечивает<any_iterator>.

Повышаю. TypeErasure обобщает это для поддержки произвольных требований и обеспечиваетпредопределенный набор общих понятий.

Последний пересмотр: 21 сентября 2016 года в 14:37:38 GMT


PrevUpHomeNext

Статья Chapter 37. Boost.TypeErasure раздела The Boost C++ Libraries BoostBook Documentation Subset Part I. The Boost C++ Libraries (BoostBook Subset) может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Part I. The Boost C++ Libraries (BoostBook Subset) ::


реклама


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

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