Almacena de forma segura según el tipo exactamente un valor de un conjunto de tipos definido con seguridad condicional frente a excepciones.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 223b5b60b80cProcedenciaPreguntas abiertas (2)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
Almacena de forma segura según el tipo exactamente un valor de un conjunto de tipos definido con seguridad condicional frente a excepciones.
La clase plantilla ara::core::Variant sirve como unión segura según el tipo para el almacenamiento y la gestión de exactamente un valor de un conjunto de tipos predeterminado [SWS_CORE_01649]. Admite mecanismos flexibles de construcción, asignación y emplace, y permite determinar la alternativa activa mediante index()[SWS_CORE_01665]. La particularidad más importante con respecto al estándar son las especificaciones noexcept condicionales y modificadas de todas las operaciones modificadoras, así como la protección frente al estado valueless_by_exception()[SWS_CORE_01666].
Contexto
La clase plantilla ara::core::Variant representa una unión con seguridad de tipos para la AUTOSAR Adaptive Platform, que se incluye mediante la cabecera ara/core/variant.h. Encapsula la gestión de exactamente un valor de una lista de tipos definida en tiempo de compilación (template <typename... Types> class Variant). La definición se orienta fundamentalmente al comportamiento de std::variant del estándar de C++ [variant], pero presenta desviaciones específicas de AUTOSAR en lo relativo a la especificación de excepciones. La descripción de la clase remite en los metadatos a [basic.string]; interpretación: es probable que se trate de una discrepancia editorial, ya que todos los requisitos hacen referencia de forma coherente a la sección del estándar [variant]. Pregunta Q-809de1af74fcb689 (abierta)
Ciclo de vida
Una instancia de ara::core::Variant pasa por fases deterministas del ciclo de vida, desde la inicialización pasando por el cambio de valor hasta la destrucción. La creación se realiza bien a través del constructor por defecto sin parámetros [SWS_CORE_01649], que inicializa la primera alternativa, a través de constructores de copia y de movimiento [SWS_CORE_01650], [SWS_CORE_01651] o a través de la transferencia directa de valores [SWS_CORE_01652]. Además, están disponibles sobrecargas para la construcción in-place mediante in_place_type_t[SWS_CORE_01653], [SWS_CORE_01654] así como in_place_index_t[SWS_CORE_01655], [SWS_CORE_01656], también en combinación con listas de inicialización.
En estado regular, el objeto mantiene siempre una alternativa válida, cuyo índice de base cero se puede determinar con el método index()[SWS_CORE_01665]. Si falla un cambio de valor durante una construcción o asignación debido al lanzamiento de una excepción, la instancia pasa al estado valueless_by_exception()[SWS_CORE_01666]. El objeto permanece en este estado hasta que se vuelve a ocupar una alternativa válida mediante una reinicialización exitosa. El destructor destruye debidamente el objeto contenido actualmente y está declarado con seguridad condicional frente a excepciones [SWS_CORE_01657].
Un flujo de uso típico comprende la instanciación, la asignación o sustitución del contenido, la consulta del estado y el intercambio de valores:
Inicialización: creación de una instancia a través de uno de los constructores, por ejemplo mediante transferencia directa de valor [SWS_CORE_01652] o explícitamente referida al tipo mediante in_place_type_t[SWS_CORE_01653].
Comprobación de estado: consulta del índice de tipo activo mediante index()[SWS_CORE_01665] así como protección frente a errores previos mediante valueless_by_exception()[SWS_CORE_01666].
Intercambio de objetos: intercambio eficiente de dos instancias de Variant mediante la función miembro swap()[SWS_CORE_01667].
Dado que el presente conjunto de registros de especificación comprende exclusivamente funciones miembro, faltan operaciones directas de lectura como un acceso a valores; probablemente las funciones de acceso y visita (de forma análoga a std::get o std::visit) se proporcionen como funciones auxiliares libres en el espacio de nombres ara::core. Pregunta Q-75847ac18088da57 (abierta)
Escenarios de error
En el centro del tratamiento de errores se encuentra la propiedad de seguridad condicional frente a excepciones (conditionally exception safe). Mientras que la biblioteca estándar prevé reglas noexcept fijas para std::variant, AUTOSAR se desvía deliberadamente: todos los constructores [SWS_CORE_01650], [SWS_CORE_01653], operadores de asignación [SWS_CORE_01658], operaciones emplace[SWS_CORE_01661], [SWS_CORE_01663], la función de intercambio swap()[SWS_CORE_01667] así como el destructor [SWS_CORE_01657] son condicionalmente noexcept. Su garantía de excepción depende directamente de las propiedades noexcept de los constructores de tipo subyacentes.
Si la construcción de un nuevo valor lanza una excepción durante una asignación o una invocación de emplace, la variante puede pasar a un estado intermedio no válido. Este se señala mediante valueless_by_exception()[SWS_CORE_01666]. Exclusivamente las dos funciones de consulta index()[SWS_CORE_01665] y valueless_by_exception()[SWS_CORE_01666] ofrecen una garantía noexcept sin restricciones y son completamente seguras frente a excepciones.
Esta guía se basa en la especificación AUTOSAR para la Adaptive Platform (Release R25-11, módulo core) y ha sido elaborada por un asistente de curación con IA.
As per corresponding usage in [variant] except for the following deviations: 1. Function is conditionally noexcept
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 0fe1e0b61069ProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
La función miembro emplace construye un valor alternativo del tipo T directamente en una instancia existente de ara::core::Variant[SWS_CORE_01661]. La función se proporciona a través del archivo de cabecera #include "ara/core/variant.h" y se ejecuta de forma síncrona [SWS_CORE_01661]. Como parámetro toma referencias de reenvío args..., que se pasan al constructor del tipo de destino T, y devuelve una referencia al objeto recién creado [SWS_CORE_01661].
En cuanto al tratamiento de errores, la operación está declarada como condicionalmente segura frente a excepciones («conditionally exception safe») [SWS_CORE_01661]. Sigue el comportamiento estándar de variant, pero difiere por una especificación condicional noexcept: una excepción se excluye exactamente cuando se cumple std::is_nothrow_constructible<T, Args...>::value[SWS_CORE_01661]. No se han definido códigos de error de AUTOSAR específicos ni mensajes a DET o DEM para esta función básica.
En lo que respecta a la concurrencia y al contexto de llamada, la especificación no menciona garantías divergentes. Interpretación: es probable que el acceso concurrente de escritura de múltiples hilos a la misma instancia de Variant a través de emplace no sea seguro frente a subprocesos sin sincronización externa, ya que AUTOSAR remite a la semántica estándar de variant. Pregunta Q-4d9d118b9916a3dc (abierta)
As per corresponding usage in [variant] except for the following deviations: 1. Function is conditionally noexcept
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: a346c9068921ProcedenciaPreguntas abiertas (2)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
La función miembro emplace de ara::core::Variant del encabezado ara/core/variant.h sirve para la creación síncrona de una alternativa de tipo T directamente en la memoria de la instancia existente [SWS_CORE_01662]. En este proceso, se pasan un std::initializer_list<U> y argumentos reenviados Args&&... args al constructor del tipo. Como valor de retorno, la función proporciona una referencia lvalue T& al objeto recién inicializado [SWS_CORE_01662].
En cuanto al tratamiento de errores y el manejo de excepciones, la función difiere de la definición estándar en [variant]: está clasificada como condicionalmente segura frente a excepciones (conditionally exception safe) y cuenta con una especificación condicional noexcept[SWS_CORE_01662]. Una llamada garantiza la ausencia de excepciones siempre que std::is_nothrow_constructible<T, std::initializer_list<U>&, Args&&...>::value se evalúe como true[SWS_CORE_01662]. Para este elemento no existen códigos de error específicos de AUTOSAR ni canales de notificación a DET y DEM.
Con respecto a la concurrencia y las condiciones de contorno: dado que emplace modifica el estado de la instancia de variant, es probable que una llamada concurrente sin sincronización externa no sea segura para subprocesos. Interpretación: antes de la construcción del nuevo objeto, se destruye un valor contenido previamente, tal como corresponde al comportamiento general de [variant]. Pregunta Q-548c84cc1d327030 (abierta)
En la interacción con interfaces afines, la función constituye la contraparte basada en tipos de la sobrecarga sin lista de inicialización [SWS_CORE_01661], así como de las alternativas basadas en índices [SWS_CORE_01663] y [SWS_CORE_01664]. Se encuentran conceptos de interfaz similares en ara::core::Optional[SWS_CORE_01120] así como en contenedores como ara::core::Vector[SWS_CORE_01366] o ara::core::Map[SWS_CORE_01458], donde, a diferencia de este caso, las operaciones emplace de contenedores no son seguras frente a excepciones.
Esta nota de uso se creó automáticamente a partir de los datos de especificación de AUTOSAR R25-11.
template <std::size_t I, typename... Args> variant_alternative_t< I, Variant< Types... > > & emplace (Args &&... args) noexcept({<cond-noexcept-11>});
As per corresponding usage in [variant] except for the following deviations: 1. Function is conditionally noexcept
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: f8cbed1f17b1ProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
usar
La función miembro emplace de la clase ara::core::Variant ([SWS_CORE_01663]) del archivo de cabecera ara/core/variant.h sirve para la construcción directa de la alternativa determinada mediante el índice de plantilla I en el almacenamiento existente del objeto. Como parámetros se pasan los argumentos Args&&... args. La llamada se realiza de forma síncrona y devuelve una referencia al valor recién creado de tipo variant_alternative_t<I, Variant<Types...>> ([SWS_CORE_01663]). El comportamiento se rige por la definición en [variant] ([SWS_CORE_01663]).
Tratamiento de errores y seguridad frente a excepciones
La especificación define como desviación del estándar C++ una cláusula noexcept({<cond-noexcept-11>}) condicional así como la propiedad conditionally exception safe ([SWS_CORE_01663]). Probablemente, el lanzamiento de excepciones dependa de si el constructor de la alternativa de destino es seguro frente a excepciones para los tipos reenviados Args.... Pregunta Q-189fe417e9ef4980 (abierta) Para esta función no se especifican códigos de error específicos, valores de retorno en caso de error ni notificaciones a DET o DEM.
Interacción y alternativas
Dentro del módulo core y del tipo ara::core::Variant, la función está integrada en un sistema de sobrecargas adicionales:
Inicialización basada en índice con una std::initializer_list bajo [SWS_CORE_01664].
Creación basada en tipo de una alternativa mediante el nombre de tipo T usando [SWS_CORE_01661] o bien en combinación con std::initializer_list vía [SWS_CORE_01662].
template <std::size_t I, typename U, typename... Args> variant_alternative_t< I, Variant< Types... > > & emplace (std::initializer_list< U > il, Args &&... args) noexcept( {<cond-noexcept-12>});
As per corresponding usage in [variant] except for the following deviations: 1. Function is conditionally noexcept
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: a600ca3cb60dProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
La función miembro emplace de ara/core/variant.h construye de forma síncrona un nuevo valor alternativo directamente in situ dentro de una instancia existente de ara::core::Variant[SWS_CORE_01664]. El tipo al que se debe acceder se determina de manera fija a través del índice de plantilla I. La llamada recibe una lista de inicializadores il del tipo std::initializer_list<U> así como argumentos opcionales args y devuelve una referencia al valor recién creado del tipo variant_alternative_t<I, Variant<Types...>>&[SWS_CORE_01664].
Para el tratamiento de errores, la operación está clasificada como condicionalmente segura frente a excepciones (conditionally exception safe) y provista de un noexcept condicional [SWS_CORE_01664]. Es de esperar que la evaluación de la condición {<cond-noexcept-12>} dependa de si el constructor del tipo de destino con il y args no lanza excepciones. Pregunta Q-87f90253fc61c883 (abierta) En la especificación no se definen códigos de error específicos ni notificaciones a DET o DEM; el comportamiento ante excepciones sigue el comportamiento estándar de [variant][SWS_CORE_01664], a excepción de la declaración noexcept.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: fb0fc41b4094ProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
La función miembro index de la clase ara::core::Variant sirve para consultar de forma síncrona el índice de base cero del tipo actualmente contenido según la especificación [SWS_CORE_01665]. Se comporta de forma análoga al uso correspondiente en el tipo estándar de C++ std::variant («As per corresponding usage in [variant]»), no acepta parámetros y devuelve el índice actual como std::size_t. Está declarada en la cabecera ara/core/variant.h y calificada como constexpr así como noexcept.
En cuanto al tratamiento de errores y la seguridad ante excepciones, el método está especificado como exception safe[SWS_CORE_01665]. Dado que está declarado como noexcept, no lanza excepciones por sí mismo ni desencadena condiciones de error. Quienes lo invoquen pueden evaluar el índice devuelto para asegurarse de qué tipo está activo en ara::core::Variant antes de acceder a valores alternativos.
En interacción con las funciones de acceso tipadas ara::core::get, index desempeña un papel central: las sobrecargas de get para lvalues y rvalues comprueban explícitamente la condición variant.index() != I según [SWS_CORE_01613], [SWS_CORE_01614], [SWS_CORE_01615] y [SWS_CORE_01616]. Si el índice no coincide con el índice de posición solicitado I, a diferencia de std::bad_variant_access se desencadena la infracción IsoStdBadVariantAccessViolation. Una comprobación previa mediante index() evita este acceso erróneo en tiempo de ejecución.
Con respecto a la concurrencia, el método es seguro como operación const para accesos de lectura concurrentes sobre la misma variante, siempre que no se produzcan modificaciones simultáneas; es de suponer que no exista una sincronización interna contra accesos de escritura paralelos. Pregunta Q-12e0dad0a6b8c5d0 (abierta)
Este texto ha sido generado por una IA sobre la base de la especificación AUTOSAR R25-11.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 015c4319d2b5ProcedenciaPreguntas abiertas (2)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
usar
La función miembro valueless_by_exception de la clase ara::core::Variant se proporciona en el módulo core a través del archivo de cabecera #include "ara/core/variant.h" ([SWS_CORE_01666]). Conforme a su signatura constexpr bool valueless_by_exception () const noexcept;, no requiere parámetros de llamada y devuelve de forma síncrona un valor booleano ([SWS_CORE_01666]). El significado funcional se rige por la semántica habitual de [variant] («As per corresponding usage in [variant]») ([SWS_CORE_01666]). Interpretación: el estado devuelto true probablemente indica a quien invoca que una asignación de valor o cambio de tipo previo se abortó debido a la aparición de una excepción y que, por tanto, el objeto Variant no representa temporalmente ningún estado válido. Pregunta Q-af7c00c7eb4ef5a1 (abierta)
Tratamiento de errores y seguridad frente a excepciones
En cuanto al comportamiento frente a errores, el método está declarado como noexcept y clasificado formalmente como exception safe ([SWS_CORE_01666]). No existe un caso de error propio durante la consulta; la función no lanza excepciones de C++ ([SWS_CORE_01666]). Para este elemento no se han definido códigos de error específicos, descripciones de respuesta ni avisos a instancias de diagnóstico y supervisión de errores como DET o DEM ([SWS_CORE_01666]).
Concurrencia y restricciones
Dado que valueless_by_exception está especificado como método const y constexpr, durante la ejecución no se realiza ningún tipo de acceso modificador sobre el estado interno del objeto ([SWS_CORE_01666]). Interpretación: es de suponer que las consultas de lectura simultáneas a la misma instancia desde varios subprocesos puedan ejecutarse con seguridad sin una sincronización especial, siempre que se excluyan operaciones de escritura concurrentes. Pregunta Q-5c28f8cef1c1f097 (abierta)
Esta nota de uso se generó de forma automatizada sobre la base de AUTOSAR R25-11.
gemini-3.8-flash-low· 2026-10-13 · Original en alemán