【发布时间】:2013-05-20 19:55:15
【问题描述】:
我正在尝试了解 std::bind 的工作原理。我写了以下内容:
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std::placeholders;
int fun2(int i,int j)
{
return i+j;
}
int fun(int i)
{
return i;
}
int main()
{
std::vector<int> v9={1,2,3,4,5,6,6,7};
std::transform(v9.begin(),v9.end(),v9.begin(),[](int i){return i;}); //works
std::transform(v9.begin(),v9.end(),v9.begin(),fun); //works
std::transform(v9.begin(),v9.end(),v9.begin(),std::bind(fun,_1)); //works
std::transform(v9.begin(),v9.end(),v9.begin(),std::bind(fun2,_1,_2)); //does not work
}
std::transform 也接受二进制操作函数。所以我尝试编写 fun2 并使用 std::bind (主要的最后一行),但它不起作用。谁能给我举个例子 std::bind 如何使用占位符(2,3 或更多)?
【问题讨论】:
-
std::transform只传递一个参数。你的意思是像std::bind(fun2, _1, 5)这样的事情吗? -
当它通过两个时除外:(2) :)
-
如果你不绑定任何参数,那么使用
std::bind真的没有意义。 -
@jrok,我的生活已经永远改变了。谢谢!
-
@sftrabbit 你是对的,但这不是一个真正的程序,我只是想了解 std::bind 的工作原理。