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

std::any::emplace

Материал из cppreference.com
< cpp‎ | utility‎ | any
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования(C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
template<class ValueType, class... Args>
std::decay_t<ValueType>& emplace( Args&&... args);
(1) (начиная с C++17)
template<class ValueType, class U, class... Args>
std::decay_t<ValueType>& emplace(std::initializer_list<U> il, Args&&... args);
(2) (начиная с C++17)

Изменяет содержащийся объект на один из типов std::decay_t<ValueType>, созданный из аргументов.

Сначала уничтожает текущий содержащийся объект (если есть) с помощью reset(), затем:

1) создаёт объект типа std::decay_t<ValueType>, прямой инициализацией не списком из std::forward<Args>(args)... в качестве содержащегося объекта.
2) создаёт объект типа std::decay_t<ValueType>, прямой инициализацией не списком из il, std::forward<Args>(args)... в качестве содержащегося объекта.

Содержание

[править]Параметры шаблона

ValueType тип содержащегося значения
Требования к типам
-
std::decay_t<ValueType> должен соответствовать требованиям CopyConstructible.

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

Ссылка на новый содержащийся объект.

[править]Исключения

Выдаёт любое исключение, созданное конструктором T. Если возникает исключение, ранее содержащийся объект (если он был) уничтожен, а *this не содержит значения.

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

#include <algorithm>#include <any>#include <iostream>#include <string>#include <vector>   class Star {std::string name;int id;   public: Star(std::string name, int id): name { name }, id { id }{std::cout<<"Star::Star(string, int)\n";}   void print()const{std::cout<<"Star{ \""<< name <<"\" : "<< id <<" };\n";}};   auto main()->int{std::any celestial;// (1) emplace( Args&&... args ); celestial.emplace<Star>("Procyon", 2943);constauto* star =std::any_cast<Star>(&celestial); star->print();   std::any av;// (2) emplace( std::initializer_list<U> il, Args&&... args ); av.emplace<std::vector<char>>({'C', '+', '+', '1', '7'}/* нет аргументов */);std::cout<< av.type().name()<<'\n';constauto* va =std::any_cast<std::vector<char>>(&av);std::for_each(va->cbegin(), va->cend(), [](charconst& c){std::cout<< c;});std::cout<<'\n';}

Возможный вывод:

Star::Star(string, int) Star{ "Procyon" : 2943 }; St6vectorIcSaIcEE C++17

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

создаёт объект any
(public функция-элемент)[править]
уничтожает содержащийся объект
(public функция-элемент)[править]
close