无需过多解释。以下代码不言而喻:
struct X
{
X(int n){}
};
int main()
{
std::vector<int> src;
std::vector<X> dest;
// Below is not valid in current C++, but that is just what I want.
transform(src.begin(), src.end(), back_insert(dest), std::bind(&X::X, _1));
}
构造函数接受一些参数并返回构造函数类的对象。
构造函数看起来像一个函数,行为像一个函数,并且完全是一个函数。
所以,我认为 std::bind 应该统一对待构造函数和其他可调用对象。
但是,如何扩展函数模板“绑定(bind)”来实现呢?
最佳答案
由于 X
可以从 int
隐式构造,因此应该通过简单的拷贝来实现转换。
copy(src.begin(), src.end(), std::back_inserter(dest));
或者甚至使用 vector 的构造函数:
std::vector<X> dest(src.begin(), src.end());
在一般情况下,boost 的 lambda library有一个 constructor
仿函数。
#include <boost/lambda/bind.hpp>
#include <boost/lambda/construct.hpp>
...
using namespace boost::lambda;
transform(src.begin(), src.end(), std::back_inserter(dest), bind(constructor<X>(), _1));
在这种特殊情况下,可能不需要绑定(bind),因为构造函数只有一个参数。
关于c++ - 如何在 C++ 中绑定(bind)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4302006/