Szablony w C++Szablony są bardzo ciekawym elementem języka C++. Zdarza mi się przeglądać nie mój kod i często mam wrażenie, że ich użycie (poza wykorzystywaniem biblioteki STL) ogranicza się do tworzenia uniwersalnych funkcji i struktur danych, a to dopiero wierzchołek góry lodowej.
Co właściwie można osiągnąć za pomocą szablonów?
Ostatnie dwa punkty mogą wymagać dodatkowego wyjaśnienia.
Jeżeli chodzi o generowanie zoptymalizowanego kodu źródłowego, to za pomocą szablonów możemy generować kod, który nie ustępuje pod względem wydajności ręcznej implementacji. Możliwa jest implementacja klasy wektora (matematycznego), gdzie rozmiar jest parametrem szablonu, a wydajność jest zawsze taka jak w przypadku optymalnej implementacji dla każdego rozmiaru z osobna.
W kwestii budowania uniwersalnych wzorców zachowań sprawa jest trochę bardziej skomplikowana -- mam tu na myśli programowanie z użyciem wytycznych, które opisuje Andrei Alexandrescu w książce "Modern C++ Design". Podczas implementacji często istnieje wiele możliwych (i sprzecznych ze sobą) rozwiązań. Czy kod ma być thread-safe? Jak ma wyglądać alokacja pamięci? Decyzje o tym powinien podejmować użytkownik kodu w zależności od swoich potrzeb i takie właśnie zachowanie można osiągnąć używając szablonów w C++.
Mechanizm szablonów ma bardzo dużą siłę ekspresji, rzadko spotykaną w innych językach. Aby nie pozostać gołosłownym, w najbliższym czasie pojawi się seria wpisów z użyciem szablonów.