Szablony w C++

17.05.2010 @ 20:27:08 by Rafał Kozik | C++ szablony programowanie

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?

  • implementacja uniwersalnych funkcji i struktur danych
  • wykonywanie obliczeń w trakcie kompilacji
  • podejmowanie decyzji w trakcie kompilacji
  • generowanie zoptymalizowanego kodu źródłowego
  • budowanie uniwersalnych wzorców zachowań

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.




Komentarze

Tomcat
2010-05-18 @ 00:35:59

Mała literówka, bo szablony są raczej wykorzystywane w bibliotece STL a nie SDL ;) poza tym również jestem mile zaskoczony możliwościami szablonów, tym bardziej chętnie poczytam co ciekawego będziesz miał do przekazania ;)
2010-05-18 @ 11:32:47

Ups, tak to już jest jak się pisze w pośpiechu -- poprawione ;)
Komentowanie zostało tymczasowo wyłączone.