zoukankan      html  css  js  c++  java
  • C++ pass function as paramenter

    void retrieveTime5(char *dtValue);
    void showTime6();
    void passFunc(void(*funcName)());
    
    int main()
    {
        passFunc(&showTime6);
        return 0;
    }
    
    void passFunc(void(*funcName)())
    {
        chrono::time_point<chrono::system_clock> startTime;
        chrono::time_point<chrono::system_clock> endTime;
        startTime=chrono::system_clock::now();
        printf("Started in passFunc!\n");
        (*funcName)();
        endTime=chrono::system_clock::now();
        printf("Ended in passFunc!\n");
        cout<<"Time cost:"
        <<chrono::duration_cast<chrono::seconds>(endTime-startTime).count()<<" seconds,"
        <<chrono::duration_cast<chrono::milliseconds>(endTime-startTime).count()<<" milliseconds,"
        <<chrono::duration_cast<chrono::microseconds>(endTime-startTime).count()<<" microseconds,"
        <<chrono::duration_cast<chrono::nanoseconds>(endTime-startTime).count()<<" nanoseconds."<<endl;
    }
    
    void showTime6()
    {
        char *dtValue=(char*)malloc(20);
        for(int i=0;i<10;i++)
        {
            retrieveTime5(dtValue);
            printf("Index=%d,value=%s\n",i,dtValue);
            sleep(1);
        }
        free(dtValue);
    }
    
    void retrieveTime5(char *dtValue)
    {
        time_t rawTime = time(NULL);
        struct tm tmInfo = *localtime(&rawTime);
        strftime(dtValue, 20, "%Y%m%d%H%M%S", &tmInfo);
    }

    Declare

    void passFunc(void(*funcName)());

    Implement

    void passFunc(void(*funcName)())
    { 
        (*funcName)(); 
    }

    Invoke

    int main()
    {
        passFunc(&showTime6);
        return 0;
    }

    When the function with parameters,declare as below.

    void callFunc6(void (*funcName)(char *));

    Implementation

    #include <uuid/uuid.h>
    
    void callFunc6(void (*funcName)(char *))
    {
        char *uuidValue = (char *)malloc(40);
        (*funcName)(uuidValue);
        printf("UuidValue=%s\n", uuidValue);
        free(uuidValue);
    }
    
    void retrieveUuid1(char *uuidValue)
    {
        uuid_t newUUID;
        uuid_generate(newUUID);
        uuid_unparse(newUUID, uuidValue);
    }

    Invoke the function

    int main()
    {
        call7();
        return 0;
    }
    
    void call7()
    {
        callFunc6(&(retrieveUuid1));
    }

    Compile

    g++ -g -std=c++2a -I. UtilityHelper.cpp h1.cpp -o h1 -luuid

    The compact version as below.

    void funcCall8(void(*funcName)());
    void callFunc9();
    void printNum();
    
    int main()
    {
        callFunc9();
        return 0;
    }
    
    void callFunc9()
    { 
        funcCall8(&printNum);
    }
    
    void printNum()
    {
        for(int i=0;i<10;i++)
        {
            printf("Num=%d\n",i);
            sleep(1);
        }
    }
    
    void funcCall8(void(*funcName)())
    {
        (*funcName)();
    }
  • 相关阅读:
    jQuery 插件为什么要return this.each()
    Android中TextView setText int 报错
    局部打印插件 jquery.PrintArea.js
    Jdbc Url 设置allowMultiQueries为true和false时底层处理机制研究
    mysql-unsha1:在未知密码情况下,登录任意MYSQL数据库
    Wireshark实战之抓包MySQL Java客户端
    linux 文件句柄数查看命令
    Java1.8 JDK源码中,对两个类进行 按位与 操作是什么意思
    linux下面覆盖文件,如何实现直接覆盖,不提示
    比特币算法——SHA256算法介绍
  • 原文地址:https://www.cnblogs.com/Fred1987/p/15660898.html
Copyright © 2011-2022 走看看