Пространства имён
Варианты
Действия

std::scoped_allocator_adaptor::construct

Материал из cppreference.com

 
 
 
 
Определено в заголовочном файле <scoped_allocator>
template < class T, class... Args >
void construct( T* p, Args&&... args )
(1)
template< class T1, class T2, class... Args1, class... Args2 >

void construct( std::pair<T1, T2>* p,
                std::piecewise_construct_t,
                std::tuple<Args1...> x,

                std::tuple<Args2...> y )
(2)
template< class T1, class T2 >
void construct( std::pair<T1, T2>* p )
(3)
template< class T1, class T2, class U, class V >
void construct( std::pair<T1, T2>* p, U&& x, V&& y )
(4)
template< class T1, class T2, class U, class V >
void construct( std::pair<T1, T2>* p, const std::pair<U, V>& xy )
(5)
template< class T1, class T2, class U, class V >
void construct( std::pair<T1, T2>* p, std::pair<U, V>&& xy );
(6)
Создает объект выделяется, но не инициализируется хранения, на который указывает p использованием OuterAllocator и предоставленных аргументов конструктора. Если объект имеет тип, который сам использует распределители, или, если это std::паре, передает InnerAllocator до построенного объекта.
Оригинал:
Constructs an object in allocated, but not initialized storage pointed to by p using OuterAllocator and the provided constructor arguments. If the object is of type that itself uses allocators, or if it is std::pair, passes InnerAllocator down to the constructed object.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Во-первых, определяющий внешний вид распределителя OUTERMOST: это тип, который будет возвращен по телефону this->outer_allocator(), а затем вызовом функции outer_allocator() член рекурсивно результате этого вызова, пока не достигнет того типа, который не имеет такой функции-члена. Этот тип является внешний распределитель.
Оригинал:
First, determines the outermost allocator type OUTERMOST: it is the type that would be returned by calling this->outer_allocator(), and then calling the outer_allocator() member function recursively on the result of this call until reaching the type that has no such member function. That type is the outermost allocator.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Тогда:
Оригинал:
Then:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
1)
Если std::uses_allocator<T, inner_allocator_type>::value==false (тип T не используют распределители), и если std::is_constructible<T, Args...>::value==true, а затем вызывает
Оригинал:
If std::uses_allocator<T, inner_allocator_type>::value==false (the type T does not use allocators) and if std::is_constructible<T, Args...>::value==true, then calls
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

std::allocator_traits<OUTERMOST>::construct( OUTERMOST(*this),
                                             p,
                                             std::forward<Args>(args)... );

В противном случае, если std::uses_allocator<T, inner_allocator_type>::value==true (тип T использует распределители, например, он является контейнером), и если std::is_constructible<T, std::allocator_arg_t, inner_allocator_type, Args...>::value==true, а затем вызывает
Оригинал:
Otherwise, if std::uses_allocator<T, inner_allocator_type>::value==true (the type T uses allocators, e.g. it is a container) and if std::is_constructible<T, std::allocator_arg_t, inner_allocator_type, Args...>::value==true, then calls
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

std::allocator_traits<OUTERMOST>::construct( OUTERMOST(*this),
                                             p,
                                             std::allocator_arg,
                                             inner_allocator(),
                                             std::forward<Args>(args)... );

В противном случае, std::uses_allocator<T, inner_allocator_type>::value==true (тип T использует распределители, например, он является контейнером), и если std::is_constructible<T, Args..., inner_allocator_type>::value==true, а затем вызывает
Оригинал:
Otherwise, std::uses_allocator<T, inner_allocator_type>::value==true (the type T uses allocators, e.g. it is a container) and if std::is_constructible<T, Args..., inner_allocator_type>::value==true, then calls
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

std::allocator_traits<OUTERMOST>::construct( OUTERMOST(*this),
                                             p,
                                             std::forward<Args>(args)...,
                                             inner_allocator());

В противном случае, ошибки компиляции выдается, потому что хотя std::uses_allocator<T> утверждал, что T является распределитель-известно, ему не хватает либо формой распределения, принимая конструкторы.
Оригинал:
Otherwise, compilation error is issued because although std::uses_allocator<T> claimed that T is allocator-aware, it lacks either form of allocator-accepting constructors.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
2)
Во-первых, если Ваш T1 или T2 является распределитель-известно, изменяет кортежи x и y включить соответствующий внутренний распределитель, в результате чего два новых кортежей xprime и yprime, в соответствии со следующими тремя правилами:
Оригинал:
First, if either T1 or T2 is allocator-aware, modifies the tuples x and y to include the appropriate inner allocator, resulting in the two new tuples xprime and yprime, according to the following three rules:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
2а), если T1 не распределитель-Aware (std::uses_allocator<T1, inner_allocator_type>::value==false, то xprime является x, без изменений. (Он также требует, чтобы std::is_constructible<T1, Args1...>::value==true)
Оригинал:
2a) if T1 is not allocator-aware (std::uses_allocator<T1, inner_allocator_type>::value==false, then xprime is x, unmodified. (it is also required that std::is_constructible<T1, Args1...>::value==true)
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
2, б), если T1 является распределитель-Aware (std::uses_allocator<T1, inner_allocator_type>::value==true), а его конструктор принимает распределитель тег ( std::is_constructible<T1, std::allocator_arg_t, inner_allocator_type, Args1...>::value==true, то xprime есть
Оригинал:
2b) if T1 is allocator-aware (std::uses_allocator<T1, inner_allocator_type>::value==true), and its constructor takes an allocator tag (std::is_constructible<T1, std::allocator_arg_t, inner_allocator_type, Args1...>::value==true, then xprime is
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

std::tuple_cat( std::tuple<std::allocator_arg_t, inner_allocator_type&>( std::allocator_arg,
                                                                               inner_allocator_type()
                                                                              ), x)

2в), если T1 является распределитель-Aware (std::uses_allocator<T1, inner_allocator_type>::value==true), а его конструктор принимает распределителя в качестве последнего аргумента (std::is_constructible<T1, Args1..., inner_allocator_type>::value==true), то xprime является std::tuple_cat(x, std::tuple<inner_allocator_type&>(inner_allocator_type())).
Оригинал:
2c) if T1 is allocator-aware (std::uses_allocator<T1, inner_allocator_type>::value==true), and its constructor takes the allocator as the last argument (std::is_constructible<T1, Args1..., inner_allocator_type>::value==true), then xprime is std::tuple_cat(x, std::tuple<inner_allocator_type&>(inner_allocator_type())).
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Те же правила применяются к T2 и замена y с yprime
Оригинал:
Same rules apply to T2 and the replacement of y with yprime
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
После xprime и yprime построены (это также требует, чтобы все типы в Args1... и... args2 являются CopyConstructible), строит пару p в Кладовка по телефону
Оригинал:
Once xprime and yprime are constructed (this also requires that all types in Args1... and Args2... are CopyConstructible), constructs the pair p in allocated storage by calling
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

std::allocator_traits<OUTERMOST>::construct( OUTERMOST(*this),
                                             p,
                                             std::piecewise_construct,
                                             xprime,
                                             yprime);


3)
Эквивалент construct(p, std::piecewise_construct, std::tuple<>(), std::tuple<>()), то есть, проходит внутренний распределитель на члена пары типов, если они принимают их.
Оригинал:
Equivalent to construct(p, std::piecewise_construct, std::tuple<>(), std::tuple<>()), that is, passes the inner allocator on to the pair's member types if they accept them.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
4)
Эквивалент
Оригинал:
Equivalent to
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

construct(p, std::piecewise_construct, std::forward_as_tuple(std::forward<U>(x)),
                                           std::forward_as_tuple(std::forward<V>(y)))

5)
Эквивалент
Оригинал:
Equivalent to
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

construct(p, std::piecewise_construct, std::forward_as_tuple(xy.first),
                                           std::forward_as_tuple(xy.second))

6)
Эквивалент
Оригинал:
Equivalent to
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

construct(p, std::piecewise_construct, std::forward_as_tuple(std::forward<U>(xy.first)),
                                           std::forward_as_tuple(std::forward<V>(xy.second)))

Содержание

[править] Параметры

p -
указатель на выделенную, но не инициализирована хранения
Оригинал:
pointer to allocated, but not initialized storage
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
args... -
Конструктор аргументы для передачи в конструктор T
Оригинал:
the constructor arguments to pass to the constructor of T
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
x -
Конструктор аргументы для передачи в конструктор T1
Оригинал:
the constructor arguments to pass to the constructor of T1
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
y -
Конструктор аргументы для передачи в конструктор T2
Оригинал:
the constructor arguments to pass to the constructor of T2
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
xy -
Пара два члена которой являются аргументы конструктора для T1 и T2
Оригинал:
the pair whose two members are the constructor arguments for T1 and T2
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Возвращаемое значение

(Нет)

[править] Заметки

Эта функция называется (через std::allocator_traits) любой распределитель-Aware объектов, таких как std::vector, который был дан std::scoped_allocator_adaptor как распределитель для использования. С inner_allocator само по себе является экземпляром std::scoped_allocator_adaptor, эта функция будет вызываться, когда распределитель-зависимые объекты, построенные через эту функцию начать строительство своих членов.
Оригинал:
This function is called (through std::allocator_traits) by any allocator-aware object, such as std::vector, that was given a std::scoped_allocator_adaptor as the allocator to use. Since inner_allocator is itself an instance of std::scoped_allocator_adaptor, this function will also be called when the allocator-aware objects constructed through this function start constructing their own members.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] См. также

[static]
создает объект в выделенной памяти
Оригинал:
constructs an object in the allocated storage
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции) [edit]
создает объект выделено в хранении
Оригинал:
constructs an object in allocated storage
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-член std::allocator) [edit]