在我的例子中,我以两种不同的方式定义了一个函数,fun1是一个lambda函数,func2是一个常规的std函数,但lambda函数不适用于variadic arguments template funcction(vat_function)。
下面的代码显示了问题:
#include <functional>
using namespace std;
template <typename... ParamTypes>
void vat_function(std::function<void(ParamTypes...)>,ParamTypes... parames)
{//this is a variadic arguments template function
};
void faa_function(std::function<void(bool,int)>,bool b,int i)
{//this is a std::function as parameter function
};
int main()
{
auto func1 = [](bool,int)->void
{
};
std::function<void(bool,int)> func2 = [](bool,int)->void
{
};
bool b=false;
int i=0;
vat_function<bool,int>(func1,b,i);//only this one doesn't work
vat_function<bool,int>(func2,b,i);//OK
faa_function(func1,b,i);//OK
faa_function(func2,b,i);//OK
}
vat_function(func1,b,i)不起作用,为什么faa_function(func1,b,i)有效?