![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Boost.MultiIndex Documentation - Compiler specificsBoost , , Boost.MultiIndex Documentation - Index
|
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 |
Рассмотрим типичный пример<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
>интуициям, которые часто вносят большой вклад в длину имени символа.
Повышаю. Поддержка MultiIndex для устаревших компиляторов не поддерживается активно, поэтому, если вы работаете со старой средой, вам может потребоваться использовать бывшую версию библиотеки. В таблице представлены некоторые устаревшие компиляторы вместе с последней версией Boost. MultiIndex, как известно, работает для них (часто с ограничениями, как объясняется в соответствующем разделе спецификаций компилятора). Если вы успешно пробуете одну из них с новыми версиями Boost. MultiIndex, чем указано здесь, пожалуйста, сообщите обратно, чтобы информация могла быть обновлена.
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 ::
реклама |