我有一个声明为 onChangeForDays(changeEvent) {
this.setState({
'fordays': changeEvent.target.value,
'isActive': true
});
}
的函数列表
据我了解,schema_id
与std::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
但是我找不到上述问题的解释。
答案 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