V C++ se dá dynamické zpracování napsat taky. Jen to pro něho není přirozené. V runtime vše lítá jako pointery, takže vlastně případné dynamický dispatching zprávy dopadne tak, že se napíše poloviční interpretr dynamického jazyka.
Což není nic složitého. Ve všech dynamických jazycích je zpracování zprávy hašovací tabulka stringů, která převede název zprávy na pointer metody, která jí zpracuje. Pokud se nenajde daný řetězec, následuje dynamický dispatching.
Jeden rozdíl ale je. C++ nezná typy v programu. Zná pouze tytpy v modulu, proto použití dynamic_cast() a podobně je celkem k ničemu, pokud nevíte, kde můžete narazit. Kromě toho je dynamic_cast() velmi pomalé. Tento operátor hledá pomocí strcmp() funkce řetězec a to je velmi pomalá akce, která nemůže ani pomýšlet na rychlost danoou hašovacími tabulkami.
Miloslav Ponkrác
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 36 203×
Přečteno 25 362×
Přečteno 23 796×
Přečteno 20 178×
Přečteno 17 875×