Espacios de nombres
Variantes
Acciones

std::variant<Types...>::emplace

De cppreference.com
< cpp‎ | utility‎ | variant
 
 
Biblioteca de servicios
 
 
template <class T, class... Args>
T& emplace(Args&&... args);
(1) (desde C++17)
template <class T, class U, class... Args>
T& emplace( std::initializer_list<U> il, Args&&... args );
(2) (desde C++17)
template <size_t I, class... Args>
std::variant_alternative_t<I, variant>& emplace( Args&&... args );
(3) (desde C++17)
template <size_t I, class U, class... Args>

std::variant_alternative_t<I, variant>&

    emplace( std::initializer_list<U> il, Args&&... args );
(4) (desde C++17)

Crea un nuevo valor en el lugar, en un objeto variante existente.

1) Equivalente a emplace<I>(std::forward<Args>(args)...), donde I es el subíndice basado en cero de T en Types.... Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_constructible_v<T, Args...> es true, y T ocurre exactamente una vez en Types....
2) Equivalente a emplace<I>(il, std::forward<Args>(args)...), donde I es el subíndice basado en cero de T en Types.... Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_constructible_v<T, std::initializer_list<U>&, Args...> es true, y T ocurre exactamente una vez Types....
3) Primero destruye el valor contenido actualmente en (si es que lo hay). Luego inicializa directamente el valor contenido como si se construyera un valor de tipo T_I con los argumentos std::forward<Args>(args).... Si se lanza una excepción, *this puede volverse valueless_by_exception. Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_constructible_v<T_I, Args...> es true. El comportamiento está indefinido si I no es menor que sizeof...(Types).
4) Primero destruye el valor contenido actualmente en (si es que lo hay). Luego inicializa directamente el valor contenido como si se construyera un valor de tipo T_I con los argumentos il, std::forward<Args>(args).... Si se lanza una excepción, *this puede volverse valueless_by_exception. Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_constructible_v<T_I, initializer_list<U>&, Args...> es true. El comportamiento está indefinido si I no es menor que sizeof...(Types).

Contenido

[editar] Parámetros

args - Los argumentos del constructor a usar al construir el nuevo valor.
il - Argumento de tipo std::initializer_list a usar al construir el nuevo valor.

[editar] Valor de retorno

Una referencia al nuevo valor contenido.

[editar] Excepciones

1-4) Cualquier excepción lanzada durante la inicialización del valor contenido.

[editar] Ejemplo

#include <iostream>
#include <string>
#include <variant>
 
int main()
{
  std::variant<std::string> v1;
  v1.emplace<0>("abc");           // de acuerdo
  std::cout << std::get<0>(v1) << '\n';
  v1.emplace<std::string>("def"); // de acuerdo
  std::cout << std::get<0>(v1) << '\n';
 
  std::variant<std::string, std::string> v2;
  v2.emplace<1>("ghi");           // de acuerdo
  std::cout << std::get<1>(v2) << '\n';
  // v2.emplace<std::string>("abc"); -> ERROR
}

Salida:

abc
def
ghi

[editar] Véase también

Asigna un variante.
(función miembro pública) [editar]