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>& |
(4) | (desde C++17) |
Crea un nuevo valor en el lugar, en un objeto variant
e 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
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
[editar] Véase también
Asigna un variante. (función miembro pública) |