关于C ++中的“绑定”

时间:2016-11-17 07:03:22

标签: c++ c++11 functional-programming bind

以下是代码:

vector<int> vec{ 0, 1, 2, 3, 4, 5, 6, 7 };
string str("123456");
auto result = find_if(vec.begin(), vec.end(), bind(check_size, str, _1));

它没有像这样vec传递给_1 :(但代码可以正常运行)

auto checkn = bind(check_size, str, _1);
checkn(vec);

这是否意味着_1可以自动接收vec?我对此很困惑。

1 个答案:

答案 0 :(得分:1)

如果你有一个可调用的对象,比如一个函数,你可以通过将一些参数绑定到固定值并将其他参数保留为其他参数,使用 std::bind() 创建另一个可调用对象稍后提供。后者标识为placeholders _1_2_3等。

在您的示例中,假设check_size()是一个带有两个参数的函数,bind(check_size, str, _1)将返回一个具有一个参数的可调用对象。此callable将为任何参数x返回值check_size("123456",x)

find_if上下文中使用时,因此会为向量中的每个bind(check_size, str, _1)项调用int,直到结果为真。

在第二种情况下,将使用vec作为参数调用callable。这可能会也可能不会编译,具体取决于check_size()的定义方式。