如何使用可变参数模板使用std :: function

吉夫·达德森(Jive Dadson)

有一个用于构造模板std::function

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;
}
尼科尔·波拉斯(Nicol Bolas)

有一个用于构建的模板std::function

template< class R, class... Args >
class function<R(Args...)>;

那不是声明的意思。这并不是在声明任何构造函数或“用于构造的”模板;这是模板类的专业化std::function专业化是std :: function的唯一定义;基本模板从未定义。我认为这与在模板声明中使用函数签名有关。也就是说,能够通过功能而不是功能使用模板。

您想获取一个可调用对象和一些值,并创建一个存储这些值的新可调用对象,该对象具有operator()重载功能,可以使用这些值调用给定函数。std::function不这样做;它没有这样做的构造函数。

究竟是什么std::bind是。基本上,您的代码可以保持不变:存储bind内部结果function完全有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用std :: function作为参数的可变参数模板

std :: function的可变参数模板参数

可变参数模板作为std :: function的参数

std :: function中的可变参数模板参数匹配

可变参数模板,类型扣除和std :: function

std :: function到可变参数成员函数,然后绑定可变参数模板参数

为什么模板参数推导因std :: function回调的可变参数模板参数而失败?

可变参数模板,std :: function和lambdas作为类成员

可变参数模板方法和std :: function-编译错误

C ++将std :: function对象传递给可变参数模板

在可变参数模板中从lambda隐式转换为std :: function

从具有可变参数模板构造函数的类型构造 std::function 对象

如何使用带有模板参数的std :: function

如何使用模板推断std :: function的参数类型?

如何使用可变参数模板将std :: variant与std :: visit一起进行?

在可变参数模板中使用std :: placeholders

对可变参数模板结构使用std :: visit

使用boost :: function的成员函数模板

使用可变参数针对“种类”层次结构验证 std::function

如何正确使用可变参数模板函数

如何使用可变参数模板转换每种变体类型

如何使用可变参数模板初始化指针?

使用可变参数模板的工厂模式?

使用可变参数模板扩展

使用可变参数模板打印列表

在可变参数模板中使用对

如何从可变参数模板参数创建std :: tuple <>?

使用std :: bind和std :: placeholders的可变参数模板工厂

使用来自 std::vector 的参数调用可变参数模板化函数