Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Opracował: Piotr DejaVu Szawdyński
Język C++

function

[szablon klasy] Szablon, który potrafi przechowywać, kopiować oraz wywoływać zarówno funkcje, wyrażenia lambda jak i metody klas.

Składnia

C/C++
#include <functional>

namespace std
{
    template < typename Sygnatura >
    class function; //niezdefiniowane
   
    template < typename ZwracanaWartosc, typename...TypyArgumentow >
    class function < ZwracanaWartosc( TypyArgumentow...) >
    {
        //...
    };
}

Parametry szablonu

ParametrOpis
typename ZwracanaWartoscOkreśla typ zwracany przez funkcję, metodę klasy bądź wyrażenie lambda, którą może przechowywać std::function.
typename... TypyArgumentowOkreśla listę argumentów jakie musi przyjmować metoda klasy, wyrażenie lambda bądź funkcja, która jest przekazywana do std::function.

Opis szczegółowy

Szablon, który potrafi przechowywać, kopiować oraz wywoływać zarówno funkcje, wyrażenia lambda jak i metody klas.

Przykład

C/C++
#include <functional>
#include <cstdio>

class CKlasa
{
public:
    CKlasa( int x )
        : m_x( x )
    { }
    void metoda( int a, int b )
    {
        printf( "[metoda] %d, %d\n", m_x * a, m_x * b );
    }
private:
    int m_x;
};

void funkcja( CKlasa * klasa, int a, int b )
{
    printf( "[funkcja] %d, %d\n", a, b );
}

int main()
{
    CKlasa klasa( 2 );
    //Deklaracja delegata:
    std::function < void( CKlasa *, int, int ) > fnAdres;
   
    //Przypisanie funkcji i jej wywołanie:
    fnAdres = & funkcja;
    fnAdres( & klasa, 3, 5 );
   
    //Przypisanie metody i jej wywołanie:
    fnAdres = & CKlasa::metoda;
    fnAdres( & klasa, 3, 5 );
   
    //Przypisanie wyrażenia lambda i jego wywołanie:
    int c = 9;
    fnAdres =[ & c ]( CKlasa * pKlasa, int a, int b ) { printf( "[wyrazenie lambda] %d, %d\n", a * c, b * c ); };
    fnAdres( & klasa, 3, 5 );
    return 0;
}
Standardowe wyjście programu:
[funkcja] 3, 5
[metoda] 6, 10
[wyrazenie lambda] 27, 45

Linki zewnętrzne