En la programación de computadoras, la información de tipo en tiempo de ejecución o la identificación de tipo en tiempo de ejecución ( RTTI ) [1] es una característica de algunos lenguajes de programación (como C++ , [2] Object Pascal y Ada [3] ) que expone información sobre un tipo de datos del objeto en tiempo de ejecución . La información de tipo en tiempo de ejecución puede estar disponible para todos los tipos o solo para los tipos que la tienen explícitamente (como es el caso de Ada). La información de tipos en tiempo de ejecución es una especialización de un concepto más general llamado introspección de tipos .
En el diseño original de C++, Bjarne Stroustrup no incluyó información de tipo de tiempo de ejecución, porque pensó que este mecanismo a menudo se usaba incorrectamente. [4]
En C++, RTTI se puede utilizar para realizar conversiones de tipo seguras mediante el dynamic_cast<>
operador y para manipular la información de tipo en tiempo de ejecución mediante el typeid
operador y la std::type_info
clase. En Object Pascal, RTTI se puede usar para realizar conversiones de tipo seguras con el as
operador, probar la clase a la que pertenece un objeto con el is
operador y manipular información de tipo en tiempo de ejecución con clases contenidas en la RTTI
unidad [5] (es decir, clases: TRttiContext , TRttiInstanceType , etc.). En Ada, los objetos de tipos etiquetados también almacenan una etiqueta de tipo, lo que permite identificar el tipo de estos objetos en tiempo de ejecución. Elin
El operador se puede usar para probar, en tiempo de ejecución, si un objeto es de un tipo específico y se puede convertir de manera segura a él. [6]
RTTI está disponible sólo para clases que son polimórficas , lo que significa que tienen al menos un método virtual . En la práctica, esto no es una limitación porque las clases base deben tener un destructor virtual para permitir que los objetos de las clases derivadas realicen una limpieza adecuada si se eliminan de un puntero base.
Algunos compiladores tienen banderas para deshabilitar RTTI. El uso de estos indicadores puede reducir el tamaño total de la aplicación, lo que los hace especialmente útiles cuando se trata de sistemas con una cantidad limitada de memoria. [7]
La typeid
palabra clave se utiliza para determinar la clase de un objeto en tiempo de ejecución . Devuelve una referencia al std::type_info
objeto, que existe hasta el final del programa. [8] El uso de typeid
, en un contexto no polimórfico, a menudo se prefiere en situaciones en las que solo se necesita la información de la clase, porque siempre es un procedimiento de tiempo constante , mientras que puede ser necesario atravesar la red de derivación de clase de su argumento en tiempo de ejecución [ cita requerida ] Algunos aspectos del objeto devuelto están definidos por la implementación, comodynamic_cast<class_type>
typeid
dynamic_cast
std::type_info::name()
, y no se puede confiar en que los compiladores sean coherentes.