Mechanizm szablonów w C++ umożliwia deklarowanie klas i funkcji sparametryzowanych typami lub wartościami. Klasa w C++ wprowadza przestrzeń nazw, w której można deklarować obiekty statyczne - daje to możliwość używania szablonów do deklarowania innych obiektów języka, nie tylko klas i funkcji - bezpośrednio nie byłoby to możliwe. Nie można na przykład zdefiniować szablonu tablicy, o tak:
template <class T>
T table[100];
Ale można uzyskać pożądany efekt w taki prosty sposób:
template <class T>
class t {
public:
static T table[100];
};
template <class T>
T t<T>::table[ 100 ];
Podobnie można postąpić z innymi kontrukcjami: Np. wyliczenie:
template <int N>
class t {
public:
enum en {
START=N,
STOP
};
};
Szablonów można użyć do wielu nieoczywistych sztuczek. Oto jak można sprawdzić, czy dwa wyrażenia są tego samego typu:
template <class T>
bool same_type(const T&, const T&) {
return true;
}
template <class T1, class T2>
bool same_type(const T1&, const T2&) {
return false;
}
int main()
{
std::cout << same_type(1, 2) << '\n';
std::cout << same_type(1, 2.1) << '\n';
}
Kompilator oczywiście całkowicie optymalizuje taką funkcję - zamienia ją na stałą.
Brak komentarzy:
Prześlij komentarz