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)
如果Stuff::some_member
是int
并且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
归档时间: |
|
查看次数: |
5209 次 |
最近记录: |