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)();
    }
  • 相关阅读:
    hdu6393 Traffic Network in Numazu 树链剖分
    codeforces 1180E Serge and Dining Room 线段树
    codeforces 546E Soldier and Traveling 网络流
    E
    poj3207 Ikki's Story IV
    【2020牛客多校第二场】F Fake Maxpooling
    【2020牛客多校第一场】J Easy Integration
    【ICPC2015沈阳M】Meeting
    【 AtCoder Beginner Contest 169】C Multiplication 3
    【AtCoder Beginner Contest 169】B Multiplication 2
  • 原文地址:https://www.cnblogs.com/Fred1987/p/15660898.html
Copyright © 2011-2022 走看看