Espacios de nombres
Variantes

std::any::emplace

De cppreference.com
 
 
Biblioteca de servicios
Apoyo del lenguaje
Apoyo de tipos (tipos básicos, RTTI)
Macros de prueba de característica de la biblioteca (C++20)
Servicios de programa
Funciones variádicas
Apoyo de corrutinas (C++20)
Apoyo de contratos (C++26)
Comparación de tres vías (C++20)
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

 
 
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.
  • Esta sobrecarga solo participa en la resolución de sobrecargas si tanto std::is_constructible_v<std::decay_t<ValueType>, Args...> como std::is_copy_constructible_v<std::decay_t<ValueType>> son true.
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.
  • Esta sobrecarga solo participa en la resolución de sobrecargas si tanto std::is_constructible_v<std::decay_t<ValueType>, std::initializer_list<U>&, Args...> como std::is_copy_constructible_v<std::decay_t<ValueType>> son true.

Parámetros de plantilla

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

Valor de retorno

Una referencia al nuevo objeto contenido.

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.

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);
    const auto* 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';
    const auto* va = std::any_cast<std::vector<char>>(&av);
    std::for_each(va->cbegin(), va->cend(), [](char const& c) { std::cout << c; });
    std::cout << '\n';
}

Posible salida:

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

Véase también

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