我想创建以下签名的boost函数对象:
void (int, boost::uuid);
但是,我想将它绑定到以下形式的函数:
void (SomeType, boost::uuid)
SomeType参数来自另一个函数调用,所以如果我直接调用它会看起来像:
SomeType myOtherFunction(int);//Prototype
...
myFunction(myOtherFunction(int), myUUID);
换句话说,我希望顶级函数对象完全隐藏SomeType 和对用户调用myOtherFunction的概念。有没有办法使用boost :: bind调用创建的一个或多个boost :: function对象?
答案 0 :(得分:3)
功能组成: Live On Coliru
#include <boost/uuid/uuid.hpp>
struct SomeType {};
SomeType myOtherFunction(int) { return SomeType(); }
void foo(SomeType, boost::uuids::uuid) {}
#include <boost/bind.hpp>
#include <boost/function.hpp>
int main()
{
boost::function<void(int, boost::uuids::uuid)> composed;
composed = boost::bind(foo, boost::bind(myOtherFunction, _1), _2);
}
无论如何,在c ++ 11中你当然会写[](int i, uuid u) { return foo(myOtherFunction(i), u); }