zoukankan      html  css  js  c++  java
  • 定义返回Block的函数

    鉴于Block与函数的相似性,先从返回函数指针的函数入手

    返回函数指针的函数

    int fun1(int arg)
    {
        return arg + 1;
    }
    
    int fun2(int arg)
    {
        return arg + 100;
    }
    
    int(*generateFun(const char *name))(int)
    {
        if (name == "fun1")
            return fun1;
        else
            return fun2;
    }
    int main()
    {
    
        int (*fun_ptr)(int) = generateFun("fun2");
        int ret = fun_ptr(30);
        printf("%d
    ",ret);
        return 0;
    }
    

    函数原型为int(*generateFun(const char *name))(int)

    • 最外层为函数返回值的说明,返回值是一个这样的函数指针int (*)(int)
    • 里层则为函数名以及函数形参
    • generateFun接受const char *形参,并返回一个函数指针(形参为int,返回值为int的函数指针)

    返回Block的函数

    int (^func())(int)
    {
        return ^(int count){return count*2;};
    }
    int main()
    {
        int (^blk)(int) = func();
        int result = blk(12);
        printf("%d
    ",result);
        return 0;
    }
    

    函数原型为int (^func())(int)

    • 最外层为函数返回值的说明,返回值是一个这样的Blockint (^)(int)
    • 里层则为函数名以及形参列表

    更好的写法

    通过typedef,可以有更直观的变现方式

    typedef int (^blk_type)(int);
    
    blk_type func()
    {
        return ^(int count){return count*2;};
    }
    

    其实从typedef的表达形式也可以推出函数的定义语法,只是把类型名变为函数名和参数列表。

    PS:《Objctive-C高级编程》中87页有第一个代码段有点错误。

  • 相关阅读:
    eclipse 配置SVN代理服务器
    jenkins 配置SVN 代理服务器
    记录服务器启动redis过程
    java牛客刷题2020年9月4日
    java牛客网错题2020年9月3日
    bootstrap-select 实现搜索,如果内容搜索不到显示到框内
    pandas教程5-合并 concat
    pandas教程-4导入导出
    pandas简单教程1
    AttributeError: module 'pandas' has no attribute 'Series'
  • 原文地址:https://www.cnblogs.com/rainySue/p/ding-yi-fan-huiBlock-de-han-shu.html
Copyright © 2011-2022 走看看