以下转换是否可行?我已经尝试过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
答案 0 :(得分:2)
你正在做功能组合。所以你必须撰写你的bind
。您需要ProcessBar(ConvertFooToBar(...))
才能发生。所以你必须真的这样做。
boost::function<void (const Foo&)> f =
boost::bind(&ProcessBar, boost::bind(ConvertFooToBar, _1));