假设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
正确签名的函数对象吗?
答案 0 :(得分:2)
是来自上面例子的一个函数对象,它具有strand :: post
的正确签名
是的,std::bind
返回的仿函数是io_service::strand::post
的有效仿函数。 std::bind
存在用于此类目的,它将参数与值绑定并减少其数量以满足API的要求。
答案 1 :(得分:2)
不,因为需要有cetain成员和方法,但这是关于它的。如果确切的返回类型并不重要,那么它可能符合要求,但严格来说它不是一个函数。std::bind
returns an unspecified object。
编辑:
在问题中澄清后,答案严格是,因为此未指定的对象需要按照strand::post
的要求行事。