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

Rationale

Boost , Chapter 1. Boost.FunctionTypes 2.5 , Chapter 1. Boost.FunctionTypes 2.5

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

Error handling rationale

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

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

Why MPL Sequences?

MPL предоставляет алгоритмы по последовательностям, поэтому преобразования (такие как превращение типов параметров по величине в ссылки const для оптимизированной пересылки или вычисления подписи для специализации boost::function после применения boost::bind) могут быть выражены более легко. Концепция MPL Sequence совместима с несколькими другими библиотеками Boost (наиболее важно Fusion), поэтому еще одной причиной является совместимость.

Pointer to member object types

Несмотря на их синтаксис, указатель на типы объектов-членов можно рассматривать как функции отсылки.

The ClassTransform template parameter

Это-указатель, это-ссылка или просто объект (или, может быть, даже умный указатель на объект) плюс корректировки cv-квалификации - все эти случаи имеют свое место, где-то и нет единого лучшего ответа.

Специальная обработка типа класса в последовательности может значительно усложнить клиентский код. Пользовательский аргумент ClassTransform позволяет клиенту корректировать тип класса до формирования последовательности, а затем обрабатывать все параметры равномерно.

Why tag types?

Давайте рассмотрим альтернативы.

Первый — просто использование большего количества шаблонов, поэтому каждое свойство должно быть запрошено явно. Этот подход приводит к более сложному клиентскому коду, если необходимо проверить более одного файла и экспоненциально увеличить интерфейс библиотеки.

Второй альтернативой является прохождение клиентом битовых шаблонов через нетиповые шаблонные параметры. Логика должна быть выполнена клиентом, и есть гораздо больше условий ошибки. Кроме того, шаблоны классов с нетиповыми параметрами шаблонов не работают в выражениях лямбда MPL и могут вызывать проблемы со старыми компиляторами.

Is it safe to have the synthesis templates take a callable builtin type or an MPL sequence as the first template argument?

Да, но это не сразу очевидно, так как набор возможных последовательностей MPL по своей сути не отделен от набора встроенных типов.

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

Why does the hidden this parameter count for the function arity of member functions?

Было сочтено предпочтительным, чтобы соблюдалось следующее условие:

mpl::size< parameter_types<T> >::value == function_arity<T>::value

Why ignore top-level cv-qualifiers on pointers?

Квалифицированный указатель cv по-прежнему является указателем. Обычно это не имеет значения, и даже если это так, это работа для Boost.TypeTraits.


PrevUpHomeNext

Статья Rationale раздела Chapter 1. Boost.FunctionTypes 2.5 Chapter 1. Boost.FunctionTypes 2.5 может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 1. Boost.FunctionTypes 2.5 ::


реклама


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

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