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
Next revision Both sides next revision
lambda [2008/04/16 22:32]
przemo86
lambda [2008/04/16 22:45]
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 146: Linia 149:
         using namespace Boost::​lambda;​         using namespace Boost::​lambda;​
  
- std::cout << " Uzycie konstrukcji if_else_then(warunek,​ instrukcje_dla_true,​ instrukcje_dla_false)."​  + std::cout << "​Uzycie konstrukcji if_else_then(warunek,​ instrukcje_dla_true,​ instrukcje_dla_false)."​  
-                  << " Alternatywnie if_(warunek)[instrukcje_dla_true].else_[instrukcje_dla_false].\n";​+                  << "​Alternatywnie if_(warunek)[instrukcje_dla_true].else_[instrukcje_dla_false].\n";​
  
  for_each(vec_test.begin(),​ vec_test.end(), ​  for_each(vec_test.begin(),​ vec_test.end(), ​
Linia 203: Linia 206:
  
  
- (do_while_loop( _1 == 0 , std::cout << constant ("\nPrzyklad 3d: \nUzycie ​konstrukcji (do_while_loop(warunek,​ instrukcje))(argumenty).\n"​)))(make_const(1));​+ (do_while_loop( _1 == 0 , std::cout << constant ("Uzycie ​konstrukcji (do_while_loop(warunek,​ instrukcje))(argumenty).\n"​)))(make_const(1));​
  
  (do_[  (do_[
- _1 == 0 , std::cout << constant ("\nUzycie ​konstrukcji (do_[instrukcje].while_(warunek))(argumenty).\n"​)+ _1 == 0 , std::cout << constant ("Uzycie ​konstrukcji (do_[instrukcje].while_(warunek))(argumenty).\n"​)
  ].while_(_1 == 0))(make_const(1));​  ].while_(_1 == 0))(make_const(1));​
 </​code>​ </​code>​
Linia 228: Linia 231:
  )(make_const (4));  )(make_const (4));
 </​code>​ </​code>​
 +
  
 ==== Rzutowanie i wyjątki ==== ==== Rzutowanie i wyjątki ====
 Biblioteka boost::​lambda umożliwia wprowadzenie rzutowania w wyrażeniu lambda jak również genrowanie i przechwytywanie wyjątków. Oto przykład prezentujący konstrukcję:​ Biblioteka boost::​lambda umożliwia wprowadzenie rzutowania w wyrażeniu lambda jak również genrowanie i przechwytywanie wyjątków. Oto przykład prezentujący konstrukcję:​
  
-<​code>​+<​code ​cpp>
 #include <​boost/​lambda/​lambda.hpp>​ #include <​boost/​lambda/​lambda.hpp>​
 #include <​boost/​lambda/​casts.hpp>​ #include <​boost/​lambda/​casts.hpp>​
Linia 247: Linia 251:
         using namespace Boost::​lambda;​         using namespace Boost::​lambda;​
  
-  example_derived ​ex_derv;​  ​   ​+  ExampleDerived ​ex_derv;​  ​   ​
  
  // Rzutowanie w tym przykładzie nie powiedzie się i zostanie wygenerowany wyjątek, a następnie ​  // Rzutowanie w tym przykładzie nie powiedzie się i zostanie wygenerowany wyjątek, a następnie ​
Linia 268: Linia 272:
  
 </​code>​ </​code>​
 +===== Plik z przykładami ===== 
 +Powyższe przykłady można wypróbować pobierając plik: 
 +{{lambda.cpp|}}
lambda.txt · ostatnio zmienione: 2008/04/16 23:27 przez przemo86