Zaawansowane CPP/Ćwiczenia 5: Klasy cech: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Arek (dyskusja | edycje)
Nie podano opisu zmian
 
Arek (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:


''Uwaga: przekonwertowane latex2mediawiki; prawdopodobnie trzeba wprowadzi� poprawki''
{Funkcje typów i inne sztuczki}
'''Zadanie 1 '''  Napisać szablon który sprawdza czy jego parametr
posiada określony typ stowarzyszony np.:
<nowiki> has_value_type<std::vector<int> >::yes
</nowiki>
powinno mieć wartość <code><nowiki> true</nowiki></code>, a
<nowiki> has_value_type<int>::yes
</nowiki>
wartość <code><nowiki> false</nowiki></code>.
'''Wskazówka '''  Można wzorować się na szablonie <code><nowiki> is_class</nowiki></code>.
'''Zadanie 2 '''  Napisać szablon który sprawdza czy jeden z jego
argumentów dziedziczy z drugiego.
'''Wskazówka '''  Jeśli <code><nowiki> Derived</nowiki></code> dziedziczy z <code><nowiki> Base</nowiki></code>
to typ <code><nowiki> Derived *</nowiki></code> może być konwertowany do <code><nowiki> Base *</nowiki></code>.
Uwaga, każdy typ wskaźnikowy może być konwertowany do <code><nowiki> void *</nowiki></code>.
'''Zadanie 3 ''' 
Napisać szablon który sprawdza czy dany typ jest wymieniony w podanej
liście typów. Np.:
<nowiki> in<int,TypeList<int,TypeList<double,NullType> >>::yes
</nowiki>
jest prawdziwe, a
<nowiki> in<int,TypeList<char,TypeList<double,NullType> >>::yes
</nowiki>
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:
<nowiki> struct Empty_type {};
</nowiki>

Wersja z 13:33, 1 wrz 2006