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

Boost.MultiIndex Documentation - Future work

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 Future work



Рассматривается ряд новых функций для включения в будущие выпуски Boost. MultiIndex. Некоторые из них зависят от возможности расширения библиотеки, что является руководящим принципом, определяющим текущий внутренний дизайн библиотеки.

Contents

Notifying indices

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

    1. [править]
    2. , , , , , , , , , , , , , , , .
    3. , , , , , , , , , , , , , , , , , , , .
    Логинг,
  • взаимодействие с приложениями на основе GUI,
  • Синхронизация между отдельными структурами данных.
  • [ORIG_END] -->

    Ниже приводится схема возможной реализации уведомительных индексов:

    struct insert_log
    {
      void operator()(int x)
      {
        std::clog<<"insert: "<<x<<std::endl;
      }
    };
    int main()
    {
      typedef multi_index_container<
        int,
        indexed_by<
          notifying<ordered_unique<identity<int> > >, // notifying index
          ordered_non_unique<identity<int> >
        >
      > indexed_t;
      indexed_t t;
      // on_insert is the signal associated to insertions
      t.on_insert.connect(insert_log());
      t.insert(0);
      t.insert(1);
      return 0;
    }
    // output:
    //   insert: 0
    //   insert: 1
    

    Constraints

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

    struct is_even
    {
      bool operator()(int x)const{return x%2==0;}
    };
    typedef multi_index_container<
      int,
      indexed_by<
        constrained<ordered_unique<identity<int> >,is_even>
      >
    > indexed_t;
    

    User-defined indices

    Механизмы, с помощью которых увеличивается. MultiIndex организует операции индексов, удерживаемых<multi_index_container>, достаточно простыми, чтобы сделать их достойными документирования, чтобы (смелый) пользователь мог писать реализации для своих собственных индексов.

    Indexed maps

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

    Основная проблема написания проиндексированной карты заключается в разработке разумного интерфейса, который максимально похож на<std::map>. По-видимому, существуют фундаментальные трудности в расширении синтаксиса 22 на несколько ключей. Например, рассмотрим ситуацию:

    indexed_map<int,string,double> m;
    // keys are int and string, double is the mapped to value
    ...
    cout<<m[0]<<endl;      // OK
    cout<<m["zero"]<<endl; // OK
    m[1]=1.0;              // !!
    

    В последнем предложении примера пользователь не имеет возможности обеспечить отображение ключа<string>с тем же значением, что и<m[1]>. Этим и подобным проблемам необходимо посвятить тщательное изучение при проектировании интерфейса потенциальной проиндексированной карты.




    Пересмотрено 19 апреля 2015 года

    © Copyright 2003-2015 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 - Future work раздела Boost.MultiIndex Documentation - Index может быть полезна для разработчиков на c++ и boost.




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



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


    реклама


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

    Время компиляции файла: 2024-08-30 11:47:00
    2025-05-20 02:54:11/0.0059881210327148/1