小编Wak*_*sei的帖子

将lambda传递给VC10上的模板函数

我在VC10上编写了以下代码.调用f1是可以的,但是在调用f2时,编译器显示错误.两个函数之间的区别仅是"模板",但实际上并未使用模板类型.为什么会出现错误?

#include <functional>

void f1( std::tr1::function<void()> f)
{
}

template <typename >
void f2( std::tr1::function<void()> f)
{
}

int main()
{
    f1( []{} );
    f2( []{} ); // Error C2783
}
Run Code Online (Sandbox Code Playgroud)

现在我理解了第一个代码的错误.以下代码怎么样?是编译器无法决定模板类型的错误原因,因为lambda生成内部匿名类,但它与std :: tr1 :: function不同?

#include <functional>

class MyClass
{
};

template <typename T>
void f2( std::tr1::function<void(T)> f)
{
}

int main()
{
    std::tr1::function<void(MyClass)> f= [](MyClass v){};

    f2( f );
    f2( [](MyClass v){} ); // C2784
}
Run Code Online (Sandbox Code Playgroud)

lambda templates visual-studio-2010 c++11

2
推荐指数
1
解决办法
338
查看次数

标签 统计

c++11 ×1

lambda ×1

templates ×1

visual-studio-2010 ×1