自c++11,c++增加了lambda,这是一个可调用对象,是一个类,匿名类,内部是operator()。
我们先默认各位都熟练使用lambda,下面稍微介绍一下泛型lambda
在C++14 中引入的泛型lambdas,是一种成员模板的简化。对于一个简单的计算两个任意类
型参数之和的lambda:
[](auto x, auto y) {
return x + y;
}
*/
//编译器会默认为它构造下面这样一个类:
class SomeCompilerSpecificName {
public:
SomeCompilerSpecificName(){}; // 构造函数只能由编译器调用
template<typename T1, typename T2>
auto operator() (T1 x, T2 y) const {
return x + y;
}
};
这非常简单,我们下面看另一段代码
#include<string>
#include<map>
#include<functional>
#include<iostream>
class Test {
public:
std::map<int, std::function<int(int)>>func;
int m = 0;
Test() {
auto a = [this](auto n) {
m += 100;
show();
return n;
};
auto b = [this](auto n) {
m -= n;
show();
return n;
};
func.insert(std::make_pair(1, a));
func.insert(std::make_pair(2, b));
}
void test() {
auto a = [this](auto n) {
m += 100;
show();
return n;
};
std::function<std::string(std::string)>f(a);
auto b = f(std::string("傻子"));
std::cout << b << std::endl;
}
private:
void show() {
std::cout << this->m << std::endl;
}
};
int main() {
Test a;
a.func[1](100); //调用函数
std::cout << a.m << std::endl;
a.test(); //由此可见,function可以绑定任意的泛型lambda
}
这里只是介绍了泛型lambda在类内与的使用,然后插入到map中。
并无难度