C++ Tutorial Lambda

Letzte Änderung: 28.08.2016

Lambda Ausdrücke

Einige Beispiele zur Verwendung von Lambda-Ausdrücken

Beispiel 1

Binden einer Lambda-Funktion an die Variable f1 und ausführen

    auto f1 = std::bind(
                        []      // Kein Zugriff auf Variable im aktuellen Bereich
                        ()      // Keine Parameter
                        {
                            printf("Beispiel1\n");
                        }
                      );
    f1();

Ausgabe:

Beispiel1


Beispiel 2

Binden einer Lambda-Funktion an die Variable f2 und ausführen. Es wird auf Variable im aktuellen Bereich zugegriffen

    int a = 1;
    auto f2 = std::bind(
                        [&a]        // Zugriff auf a als Referenz: a kann gelesen und geschrieben werden
                        ()          // Keine Parameter
                        {
                            printf("Beispiel2.2 a=%i\n", a);
                            a = a + 1;
                        }
                      );
    printf("Beispiel2.1 a=%i\n", a);
    f2();
    printf("Beispiel2.3 a=%i\n", a);

Ausgabe:

Beispiel2.1 a=1

Beispiel2.2 a=1

Beispiel2.3 a=2


Beispiel 3

Übergabe einer Lambda-Funktion an einen Thread und ausführen des Thread

    volatile bool runThread = true;
    volatile int counter = 0;
    std::thread thread(
                        [&runThread, &counter]
                        ()
                        {
                            while(runThread)
                            {
                                printf("Beispiel3 counter=%i\n", counter);
                                counter = counter + 1;
                                usleep(333 * 1000); // 0,1s
                            }
                        }
                      );
    usleep(3 * 1000 * 1000);
    runThread = false;
    thread.join();

Ausgabe:

Beispiel3 counter=0

Beispiel3 counter=1

Beispiel3 counter=2

Beispiel3 counter=3

Beispiel3 counter=4

Beispiel3 counter=5

Beispiel3 counter=6

Beispiel3 counter=7

Beispiel3 counter=8


tutorial5_lambda.cpp

download
// Einige Beispiele zur Verwendung von Lambda-Ausdrücken
// Thomas Thielemann info@th-thielemann.de
//

#include 
#include 
#include 

//!
//!
int main(int, char**)
{
    // Beispiel 1
    auto f1 = std::bind(
                        []      // Kein Zugriff auf Variable im aktuellen Bereich
                        ()      // Keine Parameter
                        {
                            printf("Beispiel1\n");
                        }
                      );
    f1();
    // Ausgabe:
    // Beispiel1

    //
    // Beispiel 2
    int a = 1;
    auto f2 = std::bind(
                        [&a]        // Zugriff auf a als Referenz: a kann gelesen und geschrieben werden
                        ()          // Keine Parameter
                        {
                            printf("Beispiel2.2 a=%i\n", a);
                            a = a + 1;
                        }
                      );
    printf("Beispiel2.1 a=%i\n", a);
    f2();
    printf("Beispiel2.3 a=%i\n", a);
    // Ausgabe:
    // Beispiel2.1 a=1
    // Beispiel2.2 a=1
    // Beispiel2.3 a=2


    //
    // Beispiel 3
    volatile bool runThread = true;
    volatile int counter = 0;
    std::thread thread(
                        [&runThread, &counter]
                        ()
                        {
                            while(runThread)
                            {
                                printf("Beispiel3 counter=%i\n", counter);
                                counter = counter + 1;
                                usleep(333 * 1000); // 0,1s
                            }
                        }
                      );
    usleep(3 * 1000 * 1000);
    runThread = false;
    thread.join();

    // Ausgabe:
    // Beispiel3 counter=0
    // Beispiel3 counter=1
    // Beispiel3 counter=2
    // Beispiel3 counter=3
    // Beispiel3 counter=4
    // Beispiel3 counter=5
    // Beispiel3 counter=6
    // Beispiel3 counter=7
    // Beispiel3 counter=8


    return 0;
}





© 2003-2017 th-thielemann.de