Información de tipo de tiempo de ejecución


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 typeidoperador y la std::type_infoclase. En Object Pascal, RTTI se puede usar para realizar conversiones de tipo seguras con el asoperador, probar la clase a la que pertenece un objeto con el isoperador y manipular información de tipo en tiempo de ejecución con clases contenidas en la RTTIunidad [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. ElinEl 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_infoobjeto, 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>typeiddynamic_caststd::type_info::name(), y no se puede confiar en que los compiladores sean coherentes.