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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
 
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