std::variant<Types...>::emplace
De cppreference.com
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).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. |
Valor de retorno
Una referencia al nuevo valor contenido.
Excepciones
1-4) Cualquier excepción lanzada durante la inicialización del valor contenido.
Ejemplo
Ejecuta este código
#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
Véase también
| Asigna un variante. (función miembro pública) |