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

Class template scoped_allocator_adaptor

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Boost.Container Header Reference

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

Class template scoped_allocator_adaptor

boost::container::scoped_allocator_adaptor

Synopsis

// In header: <boost/container/scoped_allocator.hpp>
template<typename OuterAlloc, typename... InnerAllocs> 
class scoped_allocator_adaptor {
public:
  // types
  typedef OuterAlloc                                        outer_allocator_type;                  
  typedef allocator_traits< OuterAlloc >                    outer_traits_type;                     
  typedef base_type::inner_allocator_type                   inner_allocator_type;                  
  typedef allocator_traits< inner_allocator_type >          inner_traits_type;                     
  typedef outer_traits_type::value_type                     value_type;                            
  typedef outer_traits_type::size_type                      size_type;                             
  typedef outer_traits_type::difference_type                difference_type;                       
  typedef outer_traits_type::pointer                        pointer;                               
  typedef outer_traits_type::const_pointer                  const_pointer;                         
  typedef outer_traits_type::void_pointer                   void_pointer;                          
  typedef outer_traits_type::const_void_pointer             const_void_pointer;                    
  typedef base_type::propagate_on_container_copy_assignment propagate_on_container_copy_assignment;
  typedef base_type::propagate_on_container_move_assignment propagate_on_container_move_assignment;
  typedef base_type::propagate_on_container_swap            propagate_on_container_swap;           
  typedef base_type::is_always_equal                        is_always_equal;                       
  // member classes/structs/unions
  template<typename U> 
  struct rebind {
    // types
    typedef scoped_allocator_adaptor< typename outer_traits_type::template portable_rebind_alloc< U >::type, InnerAllocs...> other;
  };
  // construct/copy/destruct
  scoped_allocator_adaptor();
  scoped_allocator_adaptor(const scoped_allocator_adaptor &);
  scoped_allocator_adaptor(scoped_allocator_adaptor &&);
  template<typename OuterA2> 
    scoped_allocator_adaptor(OuterA2 &&, const InnerAllocs &...);
  template<typename OuterA2> 
    scoped_allocator_adaptor(const scoped_allocator_adaptor< OuterA2, InnerAllocs...> &);
  template<typename OuterA2> 
    scoped_allocator_adaptor(scoped_allocator_adaptor< OuterA2, InnerAllocs...> &&);
  scoped_allocator_adaptor & operator=(const scoped_allocator_adaptor &);
  scoped_allocator_adaptor & operator=(scoped_allocator_adaptor &&);
  ~scoped_allocator_adaptor();
  // public member functions
  void swap(scoped_allocator_adaptor &);
  outer_allocator_type & outer_allocator() noexcept;
  const outer_allocator_type & outer_allocator() const noexcept;
  inner_allocator_type & inner_allocator() noexcept;
  inner_allocator_type const & inner_allocator() const noexcept;
  size_type max_size() const noexcept;
  template<typename T> void destroy(T *) noexcept;
  pointer allocate(size_type);
  pointer allocate(size_type, const_void_pointer);
  void deallocate(pointer, size_type);
  scoped_allocator_adaptor select_on_container_copy_construction() const;
  template<typename T, class... Args> void construct(T *, Args &&...);
  // friend functions
  friend void swap(scoped_allocator_adaptor &, scoped_allocator_adaptor &);
};

Description

Этот класс представляет собой C++03-совместимую реализацию std::scoped_allocator_adaptor. Шаблон классаscoped_allocator_adaptor- шаблон распределителя, который определяет ресурс памяти (внешний распределитель), который будет использоваться контейнером (как и любой другой распределитель), а также определяет внутренний ресурс распределителя, который будет передан конструктору каждого элемента в контейнере.

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

[править]Примечание:scoped_allocator_adaptorявляется производным от типа внешнего распределителя, поэтому он может быть заменен на тип внешнего распределителя в большинстве выражений. - конец примечания

В функциях члена конструкции<OUTERMOST(x)>является x, если x не имеет<outer_allocator()>функции члена и<OUTERMOST(x.outer_allocator())>в противном случае;<OUTERMOST_ALLOC_TRAITS(x)>является<allocator_traits<decltype(OUTERMOST(x))>>.

Примечание:<OUTERMOST(x)>и<OUTERMOST_ALLOC_TRAITS(x)>являются рекурсивными операциями. В соответствии с определением<outer_allocator()>рекурсия прекращается. Он завершится для всех инстанциацийscoped_allocator_adaptor. - конец примечания

scoped_allocator_adaptor public types

  1. typedefallocator_traits<OuterAlloc>external_traits_type;

    Тип: Только для экспозиции

  2. typedefbase_type::inner_allocator_typeinner_allocator_type;

    Тип:<scoped_allocator_adaptor<OuterAlloc>>, если<sizeof...(InnerAllocs)>равен нулю; в противном случае<scoped_allocator_adaptor<InnerAllocs...>>.

  3. typedefbase_type::propagate_on_container_copy_assignmentpropagate_on_container_copy_assignment;

    Тип: Тип с постоянным булевым<value>== истинно, если<allocator_traits<Allocator>:: propagate_on_container_copy_assignment::value>истинно для любого<Allocator>в наборе<OuterAlloc>и<InnerAllocs...>, ложно иначе.

  4. typedefbase_type::propagate_on_container_move_assignmentpropagate_on_container_move_assignment;

    Тип: Тип с постоянным булевым<value>== истинно, если<allocator_traits<Allocator>:: propagate_on_container_move_assignment::value>истинно для любого<Allocator>в наборе<OuterAlloc>и<InnerAllocs...>, ложно иначе.

  5. typedefbase_type::propagate_on_container_swappropagate_on_container_swap;

    Тип: Тип с постоянным булевым<value>== истинно, если<allocator_traits<Allocator>:: propagate_on_container_swap::value>истинно для любого<Allocator>в наборе<OuterAlloc>и<InnerAllocs...>, ложно иначе.

  6. typedefbase_type::is_always_equalis_always_equal;

    Тип: Тип с постоянным булевым<value>== истинно, если<allocator_traits<Allocator>:: is_always_equal::value>истинно для всех<Allocator>в наборе<OuterAlloc>и<InnerAllocs...>, ложно иначе.

scoped_allocator_adaptor public construct/copy/destruct

  1. <
    scoped_allocator_adaptor();
    >

    Эффекты: значение инициализирует базовый класс OuterAlloc и объект внутреннего распределителя.

  2. <
    scoped_allocator_adaptor(constscoped_allocator_adaptor&other);
    >

    Эффекты: инициализирует каждый распределитель внутри адаптера с соответствующим распределителем от другого.

  3. <
    scoped_allocator_adaptor(scoped_allocator_adaptor&&other);
    >

    Эффекты: ход конструирует каждый распределитель внутри адаптера с соответствующим распределителем от другого.

  4. <
    template<typenameOuterA2>
     scoped_allocator_adaptor(OuterA2&&outerAlloc,
                              constInnerAllocs&...innerAllocs);
    >

    Требуется: Авиакомпания OuterAlloc

    Эффекты: инициализирует базовый класс OuterAlloc с повышением::forward(outerAlloc) и внутренний с внутренними Allocs... (отсюда рекурсивно инициализирует каждый распределитель внутри адаптера с соответствующим распределителем из списка аргументов).

  5. <
    template<typenameOuterA2>
     scoped_allocator_adaptor(constscoped_allocator_adaptor<OuterA2,InnerAllocs...>&other);
    >

    Требуется: Авиакомпания OuterAlloc должны быть сконструированы из OuterA2.

    Эффекты: инициализирует каждый распределитель внутри адаптера с соответствующим распределителем от другого.

  6. <
    template<typenameOuterA2>
     scoped_allocator_adaptor(scoped_allocator_adaptor<OuterA2,InnerAllocs...>&&other);
    >

    Требуется: Авиакомпания OuterAlloc должен быть сконструирован из OuterA2.

    Эффекты: инициализирует каждый распределитель внутри адаптера с соответствующим значением r распределения от другого.

  7. <
    scoped_allocator_adaptor&operator=(constscoped_allocator_adaptor&other);
    >
  8. <
    scoped_allocator_adaptor&operator=(scoped_allocator_adaptor&&other);
    >
  9. <
    ~scoped_allocator_adaptor();
    >

scoped_allocator_adaptor public member functions

  1. <
    voidswap(scoped_allocator_adaptor&r);
    >

    Эффекты: свопс *это с р.

  2. <
    outer_allocator_type&outer_allocator()noexcept;
    >

    Возвращение:<static_cast<OuterAlloc&>(*this)>

  3. <
    constouter_allocator_type&outer_allocator()constnoexcept;
    >

    Возвращение:<static_cast<const OuterAlloc&>(*this)>

  4. <
    inner_allocator_type&inner_allocator()noexcept;
    >

    Возвращение: Это если<sizeof...(InnerAllocs)>равно нулю; в противном случае, внутреннее.

  5. <
    inner_allocator_typeconst&inner_allocator()constnoexcept;
    >

    Возвращение: Это если<sizeof...(InnerAllocs)>равно нулю; в противном случае — внутреннее.

  6. <
    size_typemax_size()constnoexcept;
    >

    Возвращение:<allocator_traits<OuterAlloc>:: max_size(outer_allocator())>

  7. <
    template<typenameT>voiddestroy(T*p)noexcept;
    >

    Эффекты: вызовы<OUTERMOST_ALLOC_TRAITS(*this):: destroy(OUTERMOST(*this), p)>

  8. <
    pointerallocate(size_typen);
    >

    Возвращение:<allocator_traits<OuterAlloc>::allocate(outer_allocator(), n)>

  9. <
    pointerallocate(size_typen,const_void_pointerhint);
    >

    Возвращение:<allocator_traits<OuterAlloc>::allocate(outer_allocator(), n, hint)>

  10. <
    voiddeallocate(pointerp,size_typen);
    >

    Эффекты:<allocator_traits<OuterAlloc>::deallocate(outer_allocator(), p, n)>

  11. <
    scoped_allocator_adaptorselect_on_container_copy_construction()const;
    >

    Возвращение: Новый<scoped_allocator_adaptor>объект, где каждый распределитель в адаптере инициализируется из результата вызова<allocator_traits<Allocator>::select_on_container_copy_construction()>на соответствующий распределитель в *это.

  12. <
    template<typenameT,class...Args>voidconstruct(T*p,Args&&...args);
    >

    Эффекты: 1) Если<uses_allocator<T, inner_allocator_type>::value>ложные вызовы<OUTERMOST_ALLOC_TRAITS(*this):: construct(OUTERMOST(*this), p, std::forward<Args>(args)...)>

    2) В противном случае, если<uses_allocator<T, inner_allocator_type>::value>истинно и<is_constructible<T, allocator_arg_t, inner_allocator_type, Args...>:: value>истинно, вызывает<OUTERMOST_ALLOC_TRAITS(*this):: construct(OUTERMOST(*this), p, allocator_arg, inner_allocator(), std::forward<Args>(args)...)>

    Примечание: В компиляторах без расширенной поддержки деклотипа SFINAE<is_constructible>не может быть реализовано так, что условие будет заменено конструктором_with_allocator_prefix::value. - конец примечания]

    3) В противном случае, если используется_allocator::value is true and<is_constructible<T, Args..., inner_allocator_type>:: value>is true, вызывает<OUTERMOST_ALLOC_TRAITS(*this):: construct(OUTERMOST(*this), p, std::forward<Args>(args)..., inner_allocator())>.

    Примечание: В компиляторах без расширенной поддержки SFINAE<is_constructible>не может быть реализовано так, чтобы условие было заменено<constructible_with_allocator_suffix<T>:: value>. - конец примечания]

    4) В противном случае программа является плохо сформированной.

    Примечание: Ошибка возникает, если<uses_allocator>оценивает истинность, но конкретный конструктор не принимает распределителя. Это определение предотвращает молчаливую неспособность передать внутренний распределитель содержащемуся элементу. - конец примечания]

scoped_allocator_adaptor friend functions

  1. <
    friendvoidswap(scoped_allocator_adaptor&l,scoped_allocator_adaptor&r);
    >

    Эффекты: свопс *это с р.


PrevUpHomeNext

Статья Class template scoped_allocator_adaptor раздела The Boost C++ Libraries BoostBook Documentation Subset Boost.Container Header Reference может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Boost.Container Header Reference ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-04 22:16:44/0.0084848403930664/0