使用boost :: bind和构造函数

Dan*_*ook 7 c++ constructor boost bind

我正在尝试创建新对象并使用boost :: bind将它们添加到对象列表中.例如.

struct Stuff {int some_member;};
struct Object{
    Object(int n);
};
....
list<Stuff> a;   
list<Object> objs;
....
transform(a.begin(),a.end(),back_inserter(objs), 
  boost::bind(Object,
     boost::bind(&Stuff::some_member,_1)
  )
);
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.有没有办法使用带有boost :: bind的构造函数,还是应该尝试其他方法?

syf*_*inx 11

如果你使用boost 1.43,你可以使用boost :: factory和boost :: value_factory,它可以封装构造函数调用.像这样:

 transform(a.begin(),a.end(),back_inserter(objs), 
  boost::bind(boost::value_factory<Object>(),
     boost::bind(&Stuff::some_member,_1)
  )
);
Run Code Online (Sandbox Code Playgroud)


Éri*_*ant 5

如果Stuff::some_memberint并且Object有一个非显式的ctor采取int,这应该工作:

list<Stuff> a;   
list<Object> objs;
transform(a.begin(),a.end(),back_inserter(objs), 
  boost::bind(&Stuff::some_member,_1)
);
Run Code Online (Sandbox Code Playgroud)

否则,您可以使用boost :: lambda :: constructor