3

是否可以进行以下转换?我已经尝试过 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
4

1 回答 1

2

你正在做功能组合。所以你必须编写你bind的 s。你需要ProcessBar(ConvertFooToBar(...))发生。所以你必须真正做到这一点。

boost::function<void (const Foo&)> f = 
 boost::bind(&ProcessBar, boost::bind(ConvertFooToBar, _1));
于 2012-05-13T00:16:00.860 回答