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

Boost.MultiIndex Documentation - Compiler specifics

Boost , , Boost.MultiIndex Documentation - Index

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

Boost.MultiIndex Compiler specifics



Повышаю. MultiIndex использует некоторые возможности C++11, но также оснащен для работы в достойных средах, совместимых с C++03. Мы перечислим некоторые из возможных ограничений вместе с подходящими обходными путями, когда они доступны.

Contents

Move semantics

Boost.MultiIndex используетBoost.Moveдля поддержки компиляторов без ссылок на значение r. В таких сценариях использование возможностей<multi_index_container<Value>>для повышения эффективности вставки и обработки только подвижных элементов потребует, чтобы<Value>было соответствующим образом оснащено.

Emplace functions

В компиляторах без вариадной поддержки шаблонов Boost. МультиИндекс замещает функции, эмулирующие эту недостающую функциональность, принимая до<BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS>строительных аргументов, которые внутренне пересылаются сBoost.Move: в качестве строительных аргументов в таком случае допускаются только постоянные ссылки на lvalue и rvalues.

<BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS>, которая по умолчанию равна 5, может быть глобально определена пользователем к другому значению.

Initializer lists

Никакая прозрачная эмуляция этой функциональности не может быть обеспечена при отсутствии<std::initializer_list>: рассматриватьНазначениев качестве возможной замены.

Tuples

Везде, где<std::tuple>s используются в библиотечном интерфейсе,<boost::tuple>s можно использовать вместо них. Однако обратное не соответствует действительности.

Reduction of symbol name lengths

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

Limitation of maximum number of arguments

Шаблоны классов<indexed_by>,<tag>и<composite_key>принимают переменное число аргументов, максимальное число которых ограничено внутренними макросами. Даже неиспользованные аргументы вносят свой вклад в окончательные типы, поэтому ручная настройка соответствующих макросов может привести к скромному уменьшению имен символов.

Limiting maximum number of arguments of some class templates of Boost.MultiIndex.
class template limiting macro default value
 indexed_by   BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE  20
 tag   BOOST_MULTI_INDEX_LIMIT_TAG_SIZE  20
 composite_key   BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE  10

Type hiding

Рассмотрим типичный пример<multi_index_container>:

typedef multi_index_container<
  employee,
  indexed_by<
    ordered_unique<identity<employee> >,
    ordered_non_unique<member<employee,std::string,&employee::name> >,
    ordered_unique<member<employee,int,&employee::ssnumber> >
  >
> employee_set;

Тогда, например, тип<employee_set::nth_index<0>::type>решает следующее в GCC:

boost::multi_index::detail::ordered_index<
  boost::multi_index::identity<employee>,
  std::less<employee>,
  boost::multi_index::detail::nth_layer<
    1, employee,
    boost::multi_index::indexed_by<
      boost::multi_index::ordered_unique<
        boost::multi_index::identity<employee>, mpl_::na, mpl_::na
      >,
      boost::multi_index::ordered_non_unique<
        boost::multi_index::member<employee, std::string, &employee::name>,
        mpl_::na, mpl_::na
      >,
      boost::multi_index::ordered_unique<
        boost::multi_index::member<employee, int, &employee::ssnumber>,
        mpl_::na, mpl_::na
      >,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na
    >,
    std::allocator<employee>
  >,
  boost::mpl::vector0<mpl_::na>,
  boost::multi_index::detail::ordered_unique_tag
>

Можно видеть, что значительную часть названия типа вносит часть<indexed_by<...>>, которая является не чем иным, как расширенной версией списка указателей индекса, приведенного в определении<employee_set>. Мы можем предотвратить появление этого очень длинного имени в окончательном виде, инкапсулируя его в другую, более короткую конструкцию:

// reducing symbol names through type hiding
// type hide the index specifier list within employee_set_indices
struct employee_set_indices:
  indexed_by<
    ordered_unique<identity<employee> >,
    ordered_non_unique<member<employee,std::string,&employee::name> >,
    ordered_unique<member<employee,int,&employee::ssnumber> >
  >
{};
typedef multi_index_container<
  employee,
  employee_set_indices
> employee_set;

<employee_set_indices>работает как обычный<typedef>во всех отношениях, за исключением детали: его название явно не включает информацию, содержащуюся в<indexed_by>. Применяя эту технику,<employee_set::nth_index<0>::type>становится:

boost::multi_index::detail::ordered_index<
  boost::multi_index::identity<employee>,
  std::less<employee>,
  boost::multi_index::detail::nth_layer<
    1, employee,
    employee_set_indices,
    std::allocator<employee>
  >,
  boost::mpl::vector0<mpl_::na>,
  boost::multi_index::detail::ordered_unique_tag
>

Он значительно короче оригинала, а также легче разбирается человеческим читателем. Скрытие типа не сработало бы, если бы вместо того, чтобы сделать<employee_set_indices>производным<struct>от<indexed_by<...>>, мы определили его как<typedef>:<typedef>s являются синтаксическими псевдонимами и обычно расширяются компилятором, прежде чем выполнять любую дальнейшую обработку типа.

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

Legacy compilers

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

Support for legacy compilers.
Compiler Latest known
compatible version
Date
Borland C++ Builder 6.4 до 2006, CodeGear C++Builder 2010 Никогда не работал с Бутом. MultiIndex
Comeau C/C++ 4.3.10.1 для Windows (VC++ 9.0 backend) Повышение 1,38 Февраль 2009
Compaq C++ 6.5-042-7.1-006 для Tru64 UNIX Повышение 1,38 Февраль 2009
ССС 3.2-3.4 Повышение 1.41 ноябрь 2009
HP aC++ A.06.12 - A.06.17 для HP-UX IA64 Увеличить 1,38 Февраль 2009
HP aC++ A.03.80 - A.03.85 для HP-UX PA-RISC Увеличить 1,38 Февраль 2009
IBM Visual Visual Возраст C++ V6.0 для AIX Повышение 1.33.1 декабрь 2006
IBM XL C/C++ V9.0 - V10.1 для AIX Повышение 1.41 ноябрь 2009
Компилятор Intel C++ для Linux с 8.1 по 11.1 Повышение 1.41 ноябрь 2009
Компилятор Intel C++ для Mac OS 9.1 до 11.0 Повышение 1.41 ноябрь 2009
Компилятор Intel C++ для Windows 32-bit 8.0 до 11.1 Повышение 1.41 ноябрь 2009
Компилятор Intel C++ для Windows 64-bit 10.0 до 11.11 Повышение 1.41 ноябрь 2009
Metrowerks CodeWarrior 8.3 Увеличить 1,36 Август 2008
Metrowerks CodeWarrior 9 до 9.5 Повышение 1.34.1 Июль 2007
Microsoft Visual C++ 6.0 Service Pack 5 Увеличить 1,36 Август 2008
Microsoft Visual C++ 7.0 Повышение 1,35 Март 2008
Sun Studio 10 - 12 Обновление 1 для Solaris Повышение 1.41 ноябрь 2009




Пересмотрено 20 августа 2014

© Copyright 2003-2014 Joaquín M López Muñoz. Распространяется под лицензией Boost Software License, версия 1.0. (См. сопроводительный файлLICENSE_1_0.txtили копию на) http://www.boost.org/LICENSE_1_0.txt

Статья Boost.MultiIndex Documentation - Compiler specifics раздела Boost.MultiIndex Documentation - Index может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Boost.MultiIndex Documentation - Index ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 01:43:00/0.0050160884857178/0