Narzędzia użytkownika

Narzędzia witryny


lambda

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Previous revision
Next revision
Previous revision
lambda [2008/04/16 22:33]
przemo86
lambda [2008/04/16 23:27] (aktualna)
przemo86
Linia 18: Linia 18:
 ===== Przykłady ===== ===== Przykłady =====
 Poniższe przykłady pokazują (w niewielkim stopniu) możliwości tych wyrażeń. Należy w tym miejscu zwrócić uwagę, że często wyrażenia lambda wykorzystują mechanizmy pomocnicze zdefiniowane w innych bibliotekach których nagłówki należy dołączyć. Standardowo dołączamy bibliotekę boost\lambda\lambda.hpp. W przykładach będą pokazane nagłówki które dodatkowo należy dołączyć by kod się skompilował. Poniższe przykłady pokazują (w niewielkim stopniu) możliwości tych wyrażeń. Należy w tym miejscu zwrócić uwagę, że często wyrażenia lambda wykorzystują mechanizmy pomocnicze zdefiniowane w innych bibliotekach których nagłówki należy dołączyć. Standardowo dołączamy bibliotekę boost\lambda\lambda.hpp. W przykładach będą pokazane nagłówki które dodatkowo należy dołączyć by kod się skompilował.
 +
  
 ==== Pierwszy rzut oka na boost::​lambda ==== ==== Pierwszy rzut oka na boost::​lambda ====
Linia 34: Linia 35:
 </​code>​ </​code>​
  
-Kod ten możemy odczytać jako: Wywołaj w tym konkretnym miejscu funkcję ​którą ​wyprowadzi na standardowe wyjście argumenty w kolejności 2,1,3.+Kod ten możemy odczytać jako: Wywołaj w tym konkretnym miejscu funkcję ​która ​wyprowadzi na standardowe wyjście argumenty w kolejności 2,1,3. 
  
 ==== Elementy kontenerów ==== ==== Elementy kontenerów ====
Linia 50: Linia 52:
  void funkcja_klasy (const float i) const  void funkcja_klasy (const float i) const
  {  {
- std::cout << "​\nvoid ​example::​funkcja_klasy : " << i;+ std::cout << "​\nvoid ​Example::​funkcja_klasy : " << i;
  }  }
  
Linia 132: Linia 134:
  
 </​code>​ </​code>​
 +
  
  
Linia 168: Linia 171:
  _1,  _1,
  case_statement<​0>​  case_statement<​0>​
-  (var(std::cout<< constant("​Wybrales 0 \n")),+ (std::cout << constant("​Wybrales 0 \n")),
  case_statement<​1>​  case_statement<​1>​
-  (var(std::cout<< constant("​Wybrales 1 \n")),+ (std::cout << constant("​Wybrales 1 \n")),
  default_statement  default_statement
-  (var(std::cout<< constant("​Nie mam pojecia co wybrales!\n"​)))+ (std::cout << constant("​Nie mam pojecia co wybrales!\n"​)))
  ) ((make_const(666)));​  ) ((make_const(666)));​
  
 </​code>​ </​code>​
 +
 +Użycie (make_const(666)) jest konieczne. Szablon tej funkcji jest następujący i jest zdefiniowany w bibliotece boost:
 +<code cpp>
 +template <class T> inline const T& ​ make_const(const T& t) { return t; }
 +</​code> ​
 +Przekazanie samego 666 mogłoby sprowokować błąd ponieważ 666 jest typu int i nie może mieć kwalifikatora const. Szablon natomiast potrzebuje const &.
  
 === Petla while === === Petla while ===
Linia 229: Linia 238:
  )(make_const (4));  )(make_const (4));
 </​code>​ </​code>​
 +
 +Ponieważ powyższe wyrażenie jest wyrażeniem lambda więc aby ono zrozumiało zmienne zewnętrzne należy je stworzyć jego elementem. Taką konwersje tworzy funkcja var().
  
  
Linia 270: Linia 281:
  
 </​code>​ </​code>​
 +===== Zakończenie i plik z przykładami =====
 +Wyrażenia lambda to przydatne konstrukcje które nie raz mogą zaoszczędzić czas, zmniejszyć ilość kodu czy zajętą przez program pamięć. Mankamentem jest składnia wyrażeń której należy się po prostu nauczyć i przećwiczyć na wielu przykładach.
  
 +Powyższe przykłady można wypróbować pobierając plik:
 +{{boost_lambda.cpp|}}
lambda.1208378026.txt.gz · ostatnio zmienione: 2008/04/16 22:33 przez przemo86