以下是代码:
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
?我对此很困惑。
答案 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()
的定义方式。