2016-11-17 25 views
2

下面是代码:关于在C “绑定” ++

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?我对此很困惑。

+2

'find_if'不会传递'vector',而是'vector'的元素。 – songyuanyao

+0

谢谢!我很困惑,如何绑定知道_1是什么。 –

+0

'_1'只是一个由'bind'声明的占位符。传入的参数由调用者决定,即在这里的'find_if'。 – songyuanyao

回答

1

如果你有一个可调用的对象,例如像功能,可以通过结合它的一些参数为固定值使与std::bind()另一个调用对象并保留其他参数稍后提供。后者标有placeholders命名为_1_2_3

在你的榜样,并假设check_size()是采取两个参数的函数,bind(check_size, str, _1)将返回有一个参数的可调用对象。这个可调用函数将返回任何参数x的值check_size("123456",x)

当在你的find_if上下文中使用时,bind(check_size, str, _1)因此将在矢量中的每个int项被调用,直到结果为真。

在第二种情况下,可调用函数将以vec作为参数调用。这可能编译也可能不编译,具体取决于如何定义check_size()