【发布时间】:2015-08-31 07:28:51
【问题描述】:
我是 C++ 新手,我正在学习 lambda、函子和可调用对象,我知道有一个包装类,即 std::function,它允许存储和调用不同类型的可调用对象(只要具有相同的调用签名或函数类型)。
现在,我知道您可以使用函数类型参数的函数,这些函数实际上只是函数指针参数,如下所示:
void fun(int,int*(int,int&));
这只不过是一个函数,它接受一个 int 和一个函数指针,指向像 int *f(int,int&) 这样的函数,即使语言允许我将函数作为参数传递(带或不带 & 号)。事实上,函数参数列表也可以写成:
void fun(int,int*(*)(int,int&));
现在,回到std::function 类型
我知道我可以使用函数类型实例化std::function,并且允许将任何类型的可调用对象传递给包装器。但是,函数类型不是我可以在任何实例化中用作模板类型参数的类型,例如:
std::vector<int(int)> f_vec;
相反,我应该创建一个函数指针向量
std::vector<int(*)(int)> f_vec;
这将允许我插入指向函数的指针,但不能插入函子或 lambdas。
所以,我的问题是,我怎样才能实例化一个带有类型参数的模板,比如函数类型?库std::function type.I 的意思是函数类型在我看来是我不能在模板中使用的类型?请你能把事情说得更清楚一点,因为我刚刚开始学习这些主题。谢谢
【问题讨论】:
-
std::vector的模板类型与std::function的模板类型要求不同。
标签: c++ templates c++11 lambda std-function