25. Dynamiczna identyfikacja typu

W językach obiektowych, jak wiemy, istnieje w warunkach dziedziczenia rozróżnienie między typem statycznym obiektu a jego typem dynamicznym (patrz rozdział o polimorfizmie ). Dzięki mechanizmowi polimorfizmu zazwyczaj nie musimy się tym zajmować. Są jednak sytuacje, gdy rozpoznanie w programie prawdziwego typu obiektu jest konieczne, bo na przykład zależy od tego dalszy przebieg programu. Mechanizm dynamicznego rozpoznawania typów nazywany jest RTTI (od run-time type identification) i obejmuje dwa główne zagadnienia: rozpoznanie typu w celu porównania go z typem innego obiektu oraz rozpoznanie typu w celu sprawdzenia poprawności i wykonania rzutowania (konwersji). Do realizacji pierwszego z tych zadań służy operator typeid. Do dynamicznego rzutowania i sprawdzania jego poprawności służy operator dynamic_cast.

Należy pamiętać, że mechanizm RTTI obciąża program wynikowy dodatkowym kodem, a zatem zmniejsza jego efektywność. Dlatego kompilatory pozwalają, poprzez użycie odpowiednich opcji, na włączanie lub wyłączanie tego mechanizmu. Która z tych opcji jest domyślna — zależy od kompilatora.



Podrozdziały

T.R. Werner, 25 lutego 2017; 22:31