如何使用boost函数转换参数类型?

时间:2014-09-24 00:28:31

标签: c++ boost boost-function

我想创建以下签名的boost函数对象:

void (int, boost::uuid);

但是,我想将它绑定到以下形式的函数:

void (SomeType, boost::uuid)

SomeType参数来自另一个函数调用,所以如果我直接调用它会看起来像:

SomeType myOtherFunction(int);//Prototype 
... 
myFunction(myOtherFunction(int), myUUID);

换句话说,我希望顶级函数对象完全隐藏SomeType 对用户调用myOtherFunction的概念。有没有办法使用boost :: bind调用创建的一个或多个boost :: function对象?

1 个答案:

答案 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); }