Ale pravda je taková, že šablony jsou nástrojem generického programování. Umožňuje to skutečně navrhovat algoritmy nezávislé na datových typech. To je generické programování. A co víc, můžeš genericky programovat generické typy, můžeš pracovat v generickém OOP, kde existuji pojmy jako dědičnost generického typu nebo instance generického typu. Generická třída a podobně. Můžeš používat techniky pravého OOP, kde můžeš používat objekty generických tříd bez nutnosti mít nějaké rozhraní, kde pro použití instance generické třídy stačí pouze syntaxtická správnost (něco jako ve smalltalku). To je třeba důvod, proč lze udělat foreach na iterátor, ať už je to vektor, nebo strom, nebo fronta, nebo jiný kontejner.
STL je jen jakýsi demo generického programování. Ano, i o demu se dají napsat celé knihy. Ale ta pravá síla generiky se nachází právě za plotem, až se člověk odprostí od STL.
STL má spoustu problémů. Jeden za všechny, například kontejnery nemohou používat auto_ptr (to bych vraždil!) Valná většina implementací není threadsafe (a co je horší, nejsou instančně nezávislé, takže přestože pracuji s dvěma instancemi nějakého objektu z stl ve dvou threadech, tak přesto dochází ve vláknech k problémům). Streamy jsou naprosto nepoužitelné. Je to směs chaosu bez ladu a skladu. Nemá to žádnou strukturu. Zkus někdy naimplementovat vlastní stream, jako třeba v javě když podědíš OutputStream. Až mi to někdo ukáže, že to jde nějak jednoduše, začnu věřit, že stl je trochu užitečné.
A ještě ty iterátory. Jsou často těžkopádné, například pro stromy, hashe, a další. Mnohem častěji používám index + foreach a funktory. Co iterátor řeší komplikovaně (uložení stavu iterátoru, synchronizace iterátorů), to foreach + funktor řeší levou zadní. A lepší výsledky dává i překladač. |