Функциональные объекты
В объявлении класса можно переопределить оператор (). Если этот оператор в классе переопределен, то объекты этого класса получают свойства функций (их можно использовать как функции). Такие объекты называются функциональными или функторами. Функторы удобно использовать, когда функция должна обладать "памятью", а также, как замена указателей на функции.
Пример функтора, который меняет значения двух целочисленных переменных и подсчитывает количество вызовов:
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