Функциональные объекты, cv-квалификаторы; контейнеры. Лекция 11. Часть 2
Функциональные объекты int my_func(int foo, double bar, char* baz, float& bav) {return 0;} int my_func2(int foo, double bar, char* baz, float& bav) {return 2 * foo;} using MyFuncPtr = int(*)(int, double, char*, float&);
void apply_fn(MyFuncPtr fn) { float val = 300.0; fn(42, 1337.0, nullptr, val); }
int main() { MyFuncPtr func_ptr; func_ptr = my_func; float val = -1.0; int retval = func_ptr(0, 1, nullptr, val); apply_fn(func_ptr); } Уже знаем, что функции в С++ являются «гражданами первого сорта» - имена функции являются одновременно идентификаторами со смыслом «указателя на функцию», их можно присваивать и передавать в другие функции. Функциональные объекты class MyFunctor { public: int operator()(int foo, double bar, char* baz, float& bav) { return 0; } };
int main() { MyFunctor functor; float val = -1.0; int retval = functor(0, 1, nullptr, val); } Помимо указателя на функцию и конструктора класса, в выражении типа идентификатор(аргументы) могут также участвовать функциональные объекты (функторы) - объекты класса, который переопределяет operator()