在rust里使用c样式的函数指针

Fn(i32)->i32这个是trait,&Fn(i32)->i32这个是trait object,有lifetime的
fn(i32)->i32这种就是c里的函数指针了,这个是没有lifetime的

fn hello(i:i32)->i32{
    println!("hello:{}",i);
    i+100
}

fn hi(f:fn(i32)->i32){
    f(3);
}

struct Foo{
    f:fn(i32)->i32,
}

impl Foo{
    fn say(&self,i:i32){
        (self.f)(i);
    }

    fn greeting(i:i32)->i32{
        println!("how are you:{}",i);
        i+200
    }
}

fn main(){
    let ff = Foo{f:hello};
    ff.say(123);

    let f2 = Foo{f:Foo::greeting};
    f2.say(321);
}

Play地址:http://is.gd/0fL0a5

输出结果:

hello:123
how are you:321
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值