是boost :: bind返回的仿函数,只有绑定参数等效于不带参数的函数吗?

时间:2018-02-27 13:37:39

标签: c++ boost boost-bind

假设API请求,函数f必须具有签名void function()。以下代码示例是否满足此要求?

 void func(int i)
 {
       do_something(i);
 }

 int main(int argc, char* argv[])
 {
    int i = 3;
    auto f = boost::bind(func, i);
 }

换句话说:在这种情况下,f是否符合给定API的要求?

编辑:我的问题在“功能”一词上有点模糊。为了澄清:f应该是函数式的,所以是一个简单的函数或一个函数对象。当我在Boost.ASIO中使用股线时,我提出这个问题的具体案例出现了。 Here,文档说明了strand::post的可能处理程序:

  

要调用的函数对象。执行程序将根据需要制作处理程序对象的副本。函数对象的函数签名必须是:void function();

所以:上面例子中的f是一个具有strand::post正确签名的函数对象吗?

2 个答案:

答案 0 :(得分:2)

  

是来自上面例子的一个函数对象,它具有strand :: post

的正确签名

是的,std::bind返回的仿函数是io_service::strand::post的有效仿函数。 std::bind存在用于此类目的,它将参数与值绑定并减少其数量以满足API的要求。

答案 1 :(得分:2)

不,因为std::bind returns an unspecified object需要有cetain成员和方法,但这是关于它的。如果确切的返回类型并不重要,那么它可能符合要求,但严格来说它不是一个函数。

编辑:

在问题中澄清后,答案严格,因为此未指定的对象需要按照strand::post的要求行事。