Narzędzia użytkownika

Narzędzia witryny


lambda

To jest stara wersja strony!


Biblioteka Boost Lambda

Biblioteka standardowa 'algorithm' udostępnia wiele przydatnych szablonów umożliwiających wykonywanie często potrzebnych algorytmów na kontenerach. Konstrukcje te umożliwiają np. wyszukiwanie, sortowanie, przeglądanie z modyfikacją itp. Problem w tym, że dla każdej operacji trzeba było implementować drobną klasę tzw.obiekt funkcyjny. Obiekt ten miał za zadanie dostarczyć odpowiedniego operatora czy funkcji która miała za zadanie określić logikę operacji na elementach kontenera. Następnie obiekt był przekazywany do szablonu. Taka metoda powodowała powstanie wiele obiektów funkcyjnych które niekiedy w dużym projekcie były wykorzystywane tylko raz. Biblioteka boost wprowadza mechanizm (wraz z mechanizmami pomocniczymi) który umożliwia konstruowanie tak zwanych wyrażeń lambda. Można je rozumieć jako nienazwane funkcje które są wykonywane w miejscu definicji.

Zalety

Biblioteka boost charakteryzuje się następującymi zaletami:

  • mniejsza ilość kodu.
  • skupienie kodu w miejscu faktycznego wykorzystania.
  • łatwość konserwacji kodu (nie trzeba badać szeregu obiektów funkcyjnych)
  • zmniejszenie zapotrzebowania pamięci przez program.

Wady

Biblioteka boost charakteryzuje się następującymi wadami:

  • trudna i z początku ni jak nie intuicyjna składnia.
  • drobna pomyłka programisty to szereg błędów i ostrzeżeń generowanych przez kompilator (efekt zaawansowanych mocno zagłębionych szablonów).
  • zbyt „fachowe” podejście do tworzenia wyrażeń może znacznie utrudnić zrozumienie kodu przez innych programistów.

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ł.

Pierwszy rzut oka na boost::lambda

W wyrażeniach lambda argumenty oznaczamy jako _X gdzie X może być cyfrą od 1 do 9. Bibloteka boost umożliwia zmianę nazwy _X na dowolną poprzez użycię boost::lambda::placeholderX_type. Jednak nie zaleca sie tego robić ze względu na możliwość skonfudowania programistów uczestniczących w projekcie, a przyzwyczajonych do standardowego oznaczenia.

<code cpp>

#include <boost/lambda/lambda.hpp>

using namespace boost::lambda;

(std::cout « _2 « „ ” « _1 « „ ” « _3 « „\n”) Definicja wyrażenia („ zadna lala,”,„Zadna panna,”, „ nie zastapi terminala!\n”); Argumenty wywołania.

<\code>

lambda.1208373627.txt.gz · ostatnio zmienione: 2008/04/16 21:20 przez przemo86