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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Rogoda (dyskusja | edycje)
Nie podano opisu zmian
Rogoda (dyskusja | edycje)
Nie podano opisu zmian
Linia 35: Linia 35:
macro1(f,g)(x);</nowiki>
macro1(f,g)(x);</nowiki>


spowdoduje wywołanie, <code><nowiki>f();g(x)</nowiki></code>.
spowdoduje wywołanie, <math>f();g(x)</math>.
}}
}}

Wersja z 14:47, 12 wrz 2006

Ćwiczenie 1

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

Ćwiczenie 2

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

Ćwiczenie 3

Rozszerz powyższy adapter tak, aby działał również dla jedno lub dwuargumentowych funkcji bez konieczności ich opakowywania.

Ćwiczenie 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.

Ćwiczenie 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).