template< class R, class... Args >
class function<R(Args...)>;
我还没有弄清楚如何调用它。(VC ++,如果这很重要。)
问题:如何std::function
不使用可变参数列表std::bind
?
#include <functional>
#include <iostream>
using vfunc = std::function<void()>;
using namespace std; // I know, I know.
template<class F, class... Args>
void
run(F&& f, Args&&... args) {
vfunc fn = bind(forward<F>(f), forward<Args>(args)...); //OK
//vfunc fn = vfunc(forward<F>(f), forward<Args>(args)...); // COMPILER ERROR
fn();
}
void foo(int x) {
cout << x << " skidoo\n";
}
int main() {
run(foo, 23);
return 0;
}
有一个用于构建的模板
std::function
。template< class R, class... Args > class function<R(Args...)>;
那不是声明的意思。这并不是在声明任何构造函数或“用于构造的”模板;这是模板类的专业化std::function
。专业化是std :: function的唯一定义;基本模板从未定义。我认为这与在模板声明中使用函数签名有关。也就是说,能够通过功能而不是功能使用模板。
您想获取一个可调用对象和一些值,并创建一个存储这些值的新可调用对象,该对象具有operator()
重载功能,可以使用这些值调用给定函数。std::function
不这样做;它没有这样做的构造函数。
这究竟是什么std::bind
是。基本上,您的代码可以保持不变:存储bind
内部结果function
完全有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句