提升绑定返回类型的区别

时间:2016-09-22 11:49:42

标签: c++ boost bind

我查看了What is the return type of boost::bind?的讨论,看到简短的回答是你不需要知道。

虽然我有一个以“bind(...)result”作为参数的函数,但我发现了以下差异行为

工作案例1

   void func(int a){};
   myfunc(bind(&obj::func,this,_1));

不工作案例2(当我想用2参数绑定func2时)

   void func2(int a, int b){};
   myfunc(bind(&obj::func2,this,_1,_2));

使其适用于案例3

   void func3(int a, int b){};
   myfunc(bind(&obj::func3,this,_1, 10));     

所以我的问题是以下3的后退类型有什么不同?

bind(&obj::func,this,_1));
bind(&obj::func2,this,_1,10)); //why this one can be passed the same type as above one?
bind(&obj::func3,this,_1,_2));

由于myfunc是一个非常嵌入模板和重载函数,我还没有找到如何定义“bind(...)”作为参数。这就是为什么我没有附加myfunc

的代码

1 个答案:

答案 0 :(得分:0)

正如您所链接的答案所说,您实际上并不需要知道确切的返回类型。但是,该类型与boost::function兼容,因此您可以执行此操作(作为void(void)的最简单示例):

typedef boost::function<void(void)> myFunctionType;

// this is the function that you want to bind
void foo(){}
// this is the function that should take it as an argument
void myOtherFunction(myFunctionType f);
<...>
// this is how you bind it
myFunctionType bar = boost::bind(foo);
// and this is how you pass it as argument
myOtherFunction(bar);