Dynamická identifikace datového typu ( eng. r un- time t ype information , runti t ype i dentification , RTTI ) je v některých programovacích jazycích mechanismus , který umožňuje určit datový typ proměnné resp . objekt za běhu.
Existuje mnoho implementací tohoto mechanismu, ale nejběžnější jsou:
Operace určování typu je tedy redukována buď na vyhledávání v tabulce, nebo na vyhledávání několika bajtů až k adrese, na kterou ukazuje ukazatel na objekt. Každá metoda má své výhody a nevýhody[ specifikovat ] .
V C++ se pro dynamickou identifikaci typu používají operátory a (definované v souboru typeinfo.h ) [1] , pro které je obvykle potřeba při kompilaci modulu přidat informace o typu za běhu pomocí možností kompilátoru. dynamic_casttypeid
Operátor dynamic_castse pokusí přetypovat na zadaný typ pomocí kontroly. Cílový typ operace musí být ukazatel, odkaz nebo typ void*.
Operátor typeid[2] vrací odkaz na strukturu type_info, která obsahuje pole, která umožňují získat informace o typu.
Kompilátor Delphi ukládá do spustitelného souboru programu informace o všech třídách v něm použitých. Při vytváření libovolného objektu v paměti je před ním (při záporných offsetech ) hlavička, která také obsahuje odkaz na deskriptor struktury třídy tohoto objektu. Funkce zabudované do jazyka pracují s těmito informacemi pro programátora transparentně. Operátor isvám umožňuje zkontrolovat, zda je objekt nebo typ potomkem určitého typu, a operátor asse používá k přetypování objektů nebo rozhraní z jednoho typu na druhý, což je protějšek dynamic_castv C++ .
Záhlaví objektů - také implicitně - se používají pro automatickou správu paměti .
C # používá metodu k určení typu objektu za běhu GetType, stejně jako klíčových slov isa as, což jsou protějšky pro typeida dynamic_castv C++ .
V Javě lze typ objektu získat pomocí metody getClass()deklarované ve třídě java.lang.Objecta tedy implementované každou třídou. Pro kontrolu, zda objekt patří k určitému typu, se používá operátor instanceof, analogem dynamic_castz C++ je operátor přetypování typu, který vyvolá výjimku v případě neshody typu ClassCastException.
Na úrovni bajtkódu je volání metody třídy zapsáno, stejně jako volání jakékoli jiné metody, pomocí invokevirtual opcode . Operační kódy instanceof a checkcast se používají ke kontrole převoditelnosti objektu na typ .
V Perlu lze typ objektu určit pomocí funkce blessed(), která je součástí modulu Scalar::Util CPAN. Funkce vezme ukazatel na objekt (požehnaný hash nebo ekvivalent) a vrátí skalár obsahující název třídy.
Standardní knihovna PHP definuje funkci gettype(), která vrací řetězec s názvem vestavěného typu nebo řetězec object, pokud je typem argumentu předávaného funkci uživatelsky definovaná třída.