То, что делает std :: bind, правильно. Он использует указанное вами значение (str) для вызова print_str. Таким образом, вам больше не нужно указывать его, и он всегда будет заменен связанным значением.
#include <iostream>
#include <functional>
int sum(int value1, int value2) {
return value1 + value2;
}
int main() {
std::function<int(int, int)> f1 = std::bind(sum, std::placeholders::_1, std::placeholders::_1);
std::function<int(int)> f2 = std::bind(sum, 10, std::placeholders::_1);
std::function<int()> f3 = std::bind(sum, 100, 200);
std::function<int(int)> f4 = std::bind(sum, std::placeholders::_1, 200);
int a = 1;
int b = 2;
std::cout << "the sum of " << a << " and " << b << " is: " << f1(a, b) << std::endl;
std::cout << "the sum of " << 10 << " and " << b << " is: " << f2(b) << std::endl;
std::cout << "the sum of " << 100 << " and " << 200 << " is: " << f3() << std::endl;
std::cout << "the sum of " << 200 << " and " << b << " is: " << f4(b) << std::endl;
return 0;
}
выход:
the sum of 1 and 2 is: 2
the sum of 10 and 2 is: 12
the sum of 100 and 200 is: 300
the sum of 200 and 2 is: 202
f1
не связывает значения, кроме заполнителей, и возвращает функцию, подобную int(int, int)
f2
связывает одно значение и один заполнитель и возвращает функцию, подобную int(int)
f3
связывает два значения без заполнителя и возвращает функцию, похожую на int()
f4
похож на f2
, за исключением того, что заполнитель теперь является первым параметром, а не вторым.
Ваш код относится к случаю f3
.
person
PirklW
schedule
08.07.2020
std::bind(print_str, str)
. В конце концов, результирующая функция не принимает никаких параметров, единственный параметр исходной функции был привязан, так откуда же взялся бы этот второй параметр? - person Sam Varshavchik   schedule 08.07.2020