|
|
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>
| |