Zaawansowane CPP/Ćwiczenia 11: Funktory: Różnice pomiędzy wersjami

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


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span><div class="mw-collapsible-content" style="display:none">
Zobacz plik [http://osilek.mimuw.edu.pl/images/7/70/Compose_f_gx_hy.h compose_f_gx_hy.h].
Zobacz plik [http://osilek.mimuw.edu.pl/images/a/a3/Macro.h macro.h].
</div></div>
</div></div>


Linia 111: Linia 111:
</div></div>
</div></div>


 
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span><div class="mw-collapsible-content" style="display:none">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
'''Rozwiązanie 3 '''
 
Zobacz plik {mod10/exercises/macro.h}<tt>macro.h</tt>.
 
'''Rozwiązanie 4 '''
 
Zaczynamy od implemenatcji adaptera {call}. W tym celu defiuniujemy  
Zaczynamy od implemenatcji adaptera {call}. W tym celu defiuniujemy  
szablon:
szablon:
Linia 203: Linia 183:
defiuniujemy poprawne typy argumentów fuktora, ale niekoniecznie dobry
defiuniujemy poprawne typy argumentów fuktora, ale niekoniecznie dobry
typ wartości zwracanej. Dlatego redefinujemy go potem na {void}.
typ wartości zwracanej. Dlatego redefinujemy go potem na {void}.
Całość kodu znajduje się w pliku
Całość kodu znajduje się w pliku [http://osilek.mimuw.edu.pl/images/a/a3/Macro.h macro.h].
{mod10/exercises/mixed_macro.h}<tt>mixedmacro.h</tt>.
</div></div>

Wersja z 10:52, 25 wrz 2006

Ćwiczenie 1

Zaimplementuj adapter compose_f_gx_hy realizujący złożenie dwuargumentowe f(g(x),h(y)).

Rozwiązanie

Ćwiczenie 2

Korzystając z klasy functor_traits zaimplementuj adpter bind1st, który bedzie działał zarówno dla funktorów jedno-, jak i dwuargumentowych.

Rozwiązanie

Ćwiczenie 3

Zaimplementuj funktor implementujący, składanie funkcji poprzez wykonywanie ich po kolei np.:

macro(f1,f2)(x)

powinno wykonać

f1(x);f2(x);

Wartości zwracane przez te funkcje są ignorowane. Funkcja macro powinna zwracać funktor odpowiedniego typu (posiadający odpowiednie typy stowarzyszone) tak, aby możliwe było dalsze składanie np.:

macro(macro(f1,f2),f3)(x)

powinno wywołać:

f1(x);f2(x);f3(x);
Rozwiązanie

Ćwiczenie 4

Zmodyfikuj powyższy szablon tak aby można było mieszać funkcje o różnej liczbie agrgumentów np.:

int f();
void g(double);
void h(double,int);
macro(f,g)(x);

powinno wywołać

f();g(x)}

a

macro(g,h)(3.14,0);

powinno wywołać

g(3.14);h(3.14,0)
Podpowiedź
Rozwiązanie