在C ++ 11中lambda函数和std :: function有什么区别?

时间:2013-12-12 18:39:53

标签: c++ c++11 lambda std-function

在我的例子中,我以两种不同的方式定义了一个函数,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)有效?

0 个答案:

没有答案