c++增加了function对象,对所有的可调用对象的抽象表达:
- 函数指针
- lambda表达式
- bind表达式
- 函数对象(重写 operator ()的对象)
lambda的完全表达:
[捕获列表](形参表)mutable -> 返回值类型 {函数体}
- 捕获列表: 可选符号 = (拷贝捕获); &(引用捕获); this(引用捕获当前变量)
- 形参表: 函数的参数表
- mutable: 函数调用默认是按照const调用的,任何修改值类型的需要添加mutable
- 返回值类型
- 函数定义
实例:
function <int()> Counter(int inital = 0)
{
int count = inital;
return [count]() mutable -> int { return count++};
}
内部可能的实现,编译器会将lambda表达式转换成一个匿名的函数对象
class Counter
{
public:
Counter(int _c) : count(_c) {};
int operator()() const
{
return count++;
}
private:
mutable int count;
};
网友评论