Zaawansowane CPP/Ćwiczenia 11: Funktory: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
m Zastępowanie tekstu – „\displaystyle ” na „” |
||
(Nie pokazano 1 wersji utworzonej przez jednego użytkownika) | |||
Linia 2: | Linia 2: | ||
Zaimplementuj adapter <code><nowiki>compose_f_gx_hy</nowiki></code> | Zaimplementuj adapter <code><nowiki>compose_f_gx_hy</nowiki></code> | ||
realizujący złożenie dwuargumentowe <math> | realizujący złożenie dwuargumentowe <math>f(g(x),h(y))</math>. | ||
}} | }} | ||
<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 [ | Zobacz plik [[media:Compose_f_gx_hy.h | compose_f_gx_hy.h]]. | ||
</div></div> | </div></div> | ||
Linia 45: | Linia 45: | ||
}; | }; | ||
Całość kodu znajduje się w pliku [ | Całość kodu znajduje się w pliku [[media:Bind.h | bind.h]]. | ||
</div></div> | </div></div> | ||
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 [ | Zobacz plik [[media:Macro.h | macro.h]]. | ||
</div></div> | </div></div> | ||
Linia 157: | Linia 157: | ||
return call_t1<F,A1>(f);} | return call_t1<F,A1>(f);} | ||
Całość kodu znajduje się w pliku [ | Całość kodu znajduje się w pliku [[media:Call.h | call.h]]. | ||
Implementując adapter <tt>macro</tt> musimy umieć poznać która z dwu przekazanych funkcji ma wiecej argumentów. Używamy w tym celu szablonu <tt>If_then_else</tt>: | Implementując adapter <tt>macro</tt> musimy umieć poznać która z dwu przekazanych funkcji ma wiecej argumentów. Używamy w tym celu szablonu <tt>If_then_else</tt>: | ||
Linia 180: | Linia 180: | ||
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 <tt>void</tt>. | typ wartości zwracanej. Dlatego redefinujemy go potem na <tt>void</tt>. | ||
Całość kodu znajduje się w pliku [ | Całość kodu znajduje się w pliku [[media:Mixed_macro.h | mixed_macro.h]]. | ||
</div></div> | </div></div> |
Aktualna wersja na dzień 09:00, 28 sie 2023
Ćwiczenie 1
Zaimplementuj adapter compose_f_gx_hy
realizujący złożenie dwuargumentowe .
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