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