: " - ", " - ": & , .
, std::bind()
std::bind(my_divide, 2, 2)
. , . ,
std::bind(&my_divide, 2, 2)
std::bind() - , . double(*)(double, double). .
- , std::bind() -. &print_sum, -, .. void (Foo::*)(int, int). , .. & , - ( , ): - &.
, class, . , - . ++ -, ( , # , , , 10+ #).
std::bind() , - , , , , std::mem_fn() . - static , , [] .
-, . std::bind() std::bind() , .
std::bind(&Foo::print_sum, &foo, 95, _1)
&foo, foo ( Foo*) . std::bind() , -, , , (, std::reference_wrapper<Foo>) [] , .
, - . :
#include <iostream>
struct Foo {
int value;
void f() { std::cout << "f(" << this->value << ")\n"; }
void g() { std::cout << "g(" << this->value << ")\n"; }
};
void apply(Foo* foo1, Foo* foo2, void (Foo::*fun)()) {
(foo1->*fun)();
(foo2->*fun)();
}
int main() {
Foo foo1{1};
Foo foo2{2};
apply(&foo1, &foo2, &Foo::f);
apply(&foo1, &foo2, &Foo::g);
}
apply() foo -. -, . ->* . .*, (, , ). - , , . std::bind() .
apply() &Foo::f, , f() . apply() &Foo::g , g() ( , , , , ).