重定向提升绑定

时间:2012-05-12 22:35:27

标签: c++ boost boost-bind

以下转换是否可行?我已经尝试过boost :: lambda并且只是一个普通的绑定,但是我很难在没有特殊的帮助器类的情况下进行转换,这个类可以处理foo并调用bar。

struct Foo {}; // untouchable
struct Bar {}; // untouchable

// my code
Bar ConvertFooToBar(const Foo& foo) { ... }

void ProcessBar(const Bar& bar) { ... }

boost::function<void (const Foo&)> f = 
 boost::bind(&ProcessBar, ?);

f(Foo()); // ProcessBar is invoked with a converted Bar

1 个答案:

答案 0 :(得分:2)

你正在做功能组合。所以你必须撰写你的bind。您需要ProcessBar(ConvertFooToBar(...))才能发生。所以你必须真的这样做。

boost::function<void (const Foo&)> f = 
 boost::bind(&ProcessBar, boost::bind(ConvertFooToBar, _1));