c++ - 如何在 C++ 中绑定(bind)构造函数?

标签 c++ constructor bind

无需过多解释。以下代码不言而喻:

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/

相关文章:

c++ - 用于 PCI 设备信息的 C/C++-API

c++ - 如何推断最嵌套的迭代器类型?

c++ - 在另一个类中使用一个类的对象?

android - 解绑服务但不销毁它

C++ 二十一点函数

c++ - 如何为 vector <string> 设置默认参数以在类中的默认构造函数中使用?

c++对象数组,初始化失败

c++ - 为什么参数在类构造函数中没有改变?

c - 绑定(bind)地址已使用 C udp/tcp

jquery - 如何将此函数绑定(bind)到尚未创建的元素?