2014-09-24 79 views
1

我想創建以下簽名的升壓功能對象:如何使用boost函數來轉換參數類型?

void (int, boost::uuid); 

不過,我想將其綁定到以下形式的函數:

void (SomeType, boost::uuid) 

凡SOMETYPE參數來從另一個函數調用,所以如果我直接調用它,它會看起來像:

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

換句話說,我想頂級f unction對象來完全隱藏SomeType的概念來自用戶的對myOtherFunction的調用。有沒有辦法用boost :: bind調用創建一個或多個boost :: function對象?

回答

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); }
相關問題