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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian
 
Nie podano opisu zmian
Linia 1: Linia 1:
 
'''Zadanie 1 '''  Zaimplementuj adapter <code><nowiki>compose_f_gx_hy</nowiki></code>
''Uwaga: przekonwertowane latex2mediawiki; prawdopodobnie trzeba wprowadzi� poprawki''
st.h}{badslist.h}. Ile znalazłaś błedów?
 
{Funktory }
 
'''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).