Zaawansowane CPP/Ćwiczenia 6: Funkcje typów i inne sztuczki
Zadanie 1 Napisać szablon który sprawdza czy jego parametr posiada określony typ stowarzyszony np.:
has_value_type<std::vector<int> >::yes
powinno mieć wartość true, a
has_value_type<int>::yes
wartość false.
Wskazówka Można wzorować się na szablonie is_class.
Zadanie 2 Napisać szablon który sprawdza czy jeden z jego argumentów dziedziczy z drugiego.
Wskazówka Jeśli Derived dziedziczy z Base
to typ Derived * może być konwertowany do Base *.
Uwaga, każdy typ wskaźnikowy może być konwertowany do void *.
Zadanie 3 Napisać szablon który sprawdza czy dany typ jest wymieniony w podanej liście typów. Np.:
in<int,TypeList<int,TypeList<double,NullType> >>::yes
jest prawdziwe, a
in<int,TypeList<char,TypeList<double,NullType> >>::yes
jest fałszywe.
Zadanie 4
Implementacja indeksowania listy typów podana na wykładzie, w przypadku przekroczenia zakresu powuduje bład kompilacji. Napisać mniej restrykcyjna wersję tego szablonu, która w takiej sytacji "zwraca" typ:
struct Empty_type {};