Skip to content

Latest commit

 

History

History
88 lines (61 loc) · 1.65 KB

presentation_functors.md

File metadata and controls

88 lines (61 loc) · 1.65 KB

Funktory

Obiekty funkcyjne

Coders School

Czym jest funktor - obiekt funkcyjny

Funktor jest to obiekt, który może zostać wywołany jak zwykła funkcja. Każda klasa oraz struktura, która posiada zdefiniowany operator() może pełnić rolę funktora. Alternatywną nazwą dla funktora jest obiekt funkcyjny.

struct Functor {
    void operator() () {
        std::cout << "I'm a functor!\n";
    }
};

int main() {
    Functor funct;
    funct();      // obiekt nazwany (linię wyżej)
    Functor{}();  // obiekt tymczasowy

    return 0;
}

output:

I'm a functor!
I'm a functor!

Czym jest funktor - funkcja

Funkcja także jest traktowana jako funktor, ponieważ również możemy ją wywołać poprzez ().

void function() {
    std::cout << "I'm a functor!\n";
}

int main() {
    function();

    return 0;
}

output: I'm a functor!


Wykorzystanie funktorów

Funktory możemy wykorzystać w algorytmach STL. Przykładowo algorytm for_each dla każdego elementu wywołuje on przekazany funktor. Sam funktor za swój jedyny argument musi przyjmować typ elementu z zakresu, na którym pracuje.

struct Functor {
    void operator()(int el) {
        std::cout << el << ' ';
    }
};

int main() {
    std::vector<int> vec {1, 2, 3, 4, 5};
    std::for_each(begin(vec), end(vec), Functor{});
    std::cout << '\n';

    return 0;
}

output: 1 2 3 4 5


Q&A