具有可变参数的std :: function列表如何工作

时间:2019-08-04 01:44:32

标签: c++ c++11 std std-function

我有一个声明为 onChangeForDays(changeEvent) { this.setState({ 'fordays': changeEvent.target.value, 'isActive': true }); } 的函数列表 据我了解,schema_idstd::list< std::function< void()>> funcList;不同。因此,registerCB如何接受具有std::function< void()>的不同签名的参数。

std::function< int(int)>

其中func1,func2,func3是具有不同参数列表的3个函数。

registerCB需要一个类型为function的参数,funcList也是如此。

我看到了类似的帖子-C++ std::function variable with varying arguments

但是我找不到上述问题的解释。

1 个答案:

答案 0 :(得分:2)

这是因为否则std::bind无效。

std::bind的目的是为此功能生成一个转发呼叫包装器。

由于所有必需的参数都绑定到每个函数,因此每个绑定的函数签名都与std::function<void()>&& f签名匹配。

随着c ++ 14中引入的通用lambda,std::bind的使用很少。

使用lambda封装每个函数将使您的代码更具性能,
更容易理解,并可能允许您删除<functional>标头以缩短编译时间
更不用说在被调用函数之上添加其他逻辑的功能了。

有关更多信息,请参见
https://en.cppreference.com/w/cpp/utility/functional/bind
https://en.cppreference.com/w/cpp/language/lambda