Я работаю с std::bind
, но до сих пор не понимаю, как это работает, когда мы используем его с функциями классов-членов.
Если у нас есть следующая функция:
double my_divide (double x, double y) {return x/y;}
Я прекрасно понимаю следующие строки кода:
auto fn_half = std::bind (my_divide,_1,2); // returns x/2
std::cout << fn_half(10) << '\n'; // 5
Но теперь, со следующим кодом, в котором у нас есть привязка к функции-члену, у меня есть несколько вопросов.
struct Foo {
void print_sum(int n1, int n2)
{
std::cout << n1+n2 << '\n';
}
int data = 10;
};
Foo foo;
auto f = std::bind(&Foo::print_sum, &foo, 95, _1);
f(5);
Почему первый аргумент является ссылкой? Я хотел бы получить теоретическое объяснение.
Второй аргумент - это ссылка на объект, и для меня это самая сложная часть для понимания. Я думаю, потому что
std::bind
нужен контекст, я прав? Это всегда так? Имеет лиstd::bind
какую-то реализацию, требующую ссылки, когда первый аргумент является функцией-членом?