![]() |
![]() ![]() ![]() ![]() |
![]() |
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 ::
реклама |