Function 语法浅谈

本文介绍了C++中function的用法,强调了它在处理递归调用和作为不同类型的函数引用时的作用。通过示例展示了如何使用function定义和调用递归函数,以及如何与Lambda表达式结合。此外,还提到了function可以表示静态和非静态成员函数的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Funtion 的使用 \textbf{Funtion}\ \text{的使用} Funtion 的使用

关于 function属实是一种有趣的语法。

我们常常会碰到的问题,就是我们在一个函数内部想使用其局部变量来进行一些操作。

我们常用的写法是直接定义一个函数:

auto F = [&, i] () -> void{
  	.....  
};

但是如果说我们需要使用一些递归的调用,auto不能判断出其类型,我们就必须使用 function函数。

换言之 function本质上是一种类型,表示一个递归函数的指针。

function<A(B)> dfs;

其中 A表示返回值的类型,B表示要填的参数。

举一个列子,我们需要遍历以当前节点 xxx 为根的树。

for(int i = 1; i <= n; ++ i) {
	function<void(const int& p,int pre)> dfs;
    dfs = [&] (const int &p,int pre) {
        for(auto v : vc[p]) if(v != pre) dfs(to, p);
    }
}

除此之外其还可以成为很多类型的函数:

struct Node : {
    int operator + (const int &a, const int &b) const {
        return a + b;
    }
}
function<int(int, int)> F = Node;
auto g = [] (int a,int b) { return a - b; }
function<int(int, int)> F = g;

也就是静态,非静态函数,Lambda\tt LambdaLambda 表达式等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值