Функциональные объекты

В объявлении класса можно переопределить оператор (). Если этот оператор в классе переопределен, то объекты этого класса получают свойства функций (их можно использовать как функции). Такие объекты называются функциональными или функторами. Функторы удобно использовать, когда функция должна обладать "памятью", а также, как замена указателей на функции.

Пример функтора, который меняет значения двух целочисленных переменных и подсчитывает количество вызовов:

functor_sample.cpp
class _swap{
    static size_t counter = 0;
    static void increment() { ++counter; }
public:
    _swap(){}
    void operator ()(int& a, int& b){
        int tmp = a;
        a = b;
        b = tmp;
        increment();
    }
    int getNrCalls() {return counter; }
};

int main() {
    _swap swap;
    int a = 3, b = 5;
    swap(a, b);
    return 0;
}

Last updated