Zaawansowane CPP/Ćwiczenia 11: Funktory: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwaniaLinia 1: | Linia 1: | ||
− | + | '''Zadanie 1 ''' Zaimplementuj adapter <code><nowiki>compose_f_gx_hy</nowiki></code> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | '''Zadanie 1 ''' Zaimplementuj adapter <code><nowiki> compose_f_gx_hy</nowiki></code> | ||
realizujący złożenie dwuargumentowe <math>\displaystyle f(g(x),h(y))</math>. | realizujący złożenie dwuargumentowe <math>\displaystyle f(g(x),h(y))</math>. | ||
− | '''Zadanie 2 ''' Korzystając z klasy <code><nowiki> functor_traits</nowiki></code> | + | '''Zadanie 2 ''' Korzystając z klasy <code><nowiki>functor_traits</nowiki></code> |
− | zaimplementuj adpter <code><nowiki> bind1st</nowiki></code> który bedzie działał zarówno dla | + | zaimplementuj adpter <code><nowiki>bind1st</nowiki></code> który bedzie działał zarówno dla |
jedno i dwuargumentowych funktorów. | jedno i dwuargumentowych funktorów. | ||
Linia 21: | Linia 15: | ||
wykonywanie ich po kolei: | wykonywanie ich po kolei: | ||
− | <nowiki> macro1(f1,f2)(x) | + | <nowiki> macro1(f1,f2)(x)</nowiki> |
− | </nowiki> | ||
− | wykonuje <code><nowiki> f1(x);f2(x);</nowiki></code>. Wartości zwracane przez te funkcje są | + | wykonuje <code><nowiki>f1(x);f2(x);</nowiki></code>. Wartości zwracane przez te funkcje są |
− | ignorowane. Podobnie dla funkcji <code><nowiki> macro2(f1,f2)</nowiki></code>, która ma zwrócić | + | ignorowane. Podobnie dla funkcji <code><nowiki>macro2(f1,f2)</nowiki></code>, która ma zwrócić |
funktor dwuargumentowy. | funktor dwuargumentowy. | ||
Linia 35: | Linia 28: | ||
void g(double); | void g(double); | ||
− | macro1(f,g)(x); | + | macro1(f,g)(x);</nowiki> |
− | </nowiki> | ||
− | spowdoduje wywołanie, <code><nowiki> f();g(x)</nowiki></code>. | + | spowdoduje wywołanie, <code><nowiki>f();g(x)</nowiki></code>. |
Wersja z 09:33, 3 wrz 2006
Zadanie 1 Zaimplementuj adapter compose_f_gx_hy
realizujący złożenie dwuargumentowe .
Zadanie 2 Korzystając z klasy functor_traits
zaimplementuj adpter bind1st
który bedzie działał zarówno dla
jedno i dwuargumentowych funktorów.
Zadanie 3 Rozszerz powyższy adapter tak, aby działa również dla jedno lub dwuargumentowych
funkcji bez konieczności ich opakowywania.
Zadanie 4
Zaimplementuj funktor impelemetujący, składanie funkcji poprzez wykonywanie ich po kolei:
macro1(f1,f2)(x)
wykonuje f1(x);f2(x);
. Wartości zwracane przez te funkcje są
ignorowane. Podobnie dla funkcji macro2(f1,f2)
, która ma zwrócić
funktor dwuargumentowy.
Zadanie 5
Zmodyfikuj powyższy szablon tak aby mogły być do niego przekazywane również funkcje bezargumentowe:
int f(); void g(double); macro1(f,g)(x);
spowdoduje wywołanie, f();g(x)
.