Espacios de nombres
Variantes
Acciones

std::any::emplace

De cppreference.com
< cpp‎ | utility‎ | any
 
 
Biblioteca de servicios
 
 
template<class ValueType, class... Args>
std::decay_t<ValueType>& emplace( Args&&... args);
(1) (desde C++17)
template<class ValueType, class U, class... Args>
std::decay_t<ValueType>& emplace(std::initializer_list<U> il, Args&&... args);
(2) (desde C++17)

Cambia el objeto contenido a uno de tipo std::decay_t<ValueType>, construído a partir de los argumentos.

Primero destruye el objeto contenido actual (si es que lo hay) mediante reset(), luego:

1) Construye un objeto de tipo std::decay_t<ValueType>, usando la inicialización directa de no lista a partir de std::forward<Args>(args)..., como el objeto contenido.
2) Construye un objeto de tipo std::decay_t<ValueType>, usando la inicialización directa de no lista a partir de il, std::forward<Args>(args)..., como el objeto contenido.

Contenido

[editar]Parámetros de plantilla

ValueType - Tipo del valor contenido.
Requisitos de tipo
-
std::decay_t<ValueType> debe satisfacer los requisitos de CopyConstructible.

[editar]Valor de retorno

Una referencia al nuevo objeto contenido.

[editar]Excepciones

Lanza cualquier excepción lanzada por el constructor de T. Si se lanza una excepción, el objeto previamente contenido (si es que lo hay) se destruye, y *this no contiene un valor.

[editar]Ejemplo

#include <algorithm>#include <any>#include <iostream>#include <string>#include <vector>   class Estrella {std::string nombre;int id;   public: Estrella(std::string nombre, int id): nombre { nombre }, id { id }{std::cout<<"Estrella::Estrella(string, int)\n";}   void imprimir()const{std::cout<<"Estrella{ \""<< nombre <<"\" : "<< id <<" };\n";}};   auto main()->int{std::any celestial;// (1) emplace( Args&&... args ); celestial.emplace<Estrella>("Procyon", 2943);constauto* estrella =std::any_cast<Estrella>(&celestial); estrella->imprimir();   std::any av;// (2) emplace( std::initializer_list<U> il, Args&&... args ); av.emplace<std::vector<char>>({'C', '+', '+', '1', '7'}/* no argumentos */);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';}

Posible salida:

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

[editar]Véase también

Construye un objeto any.
(función miembro pública)[editar]
Destruye el objeto contenido.
(función miembro pública)[editar]
close