c語言中通過函式指標實現函式過載

pamxy發表於2013-07-10

轉自:http://blog.csdn.net/sing_sing/article/details/6109813

我們都知道過載是c++物件導向的特性。c語言中是不存在的。所謂過載簡單來說就是一個函式名可以實現不同的功能,要麼輸入引數不同或者引數個數不同,要麼返回型別不同。例如函式add(),在c++中可以輕易實現int,double等不同型別引數的相加功能,而在c語言中卻不能這樣實現。c語言中實現過載功能,或者準確來說是類似過載的功能,可以通過函式指標的方式來實現。下面為演示程式碼:

 

typedef struct _int_param {
    int param1;
    int param2;
}INT_PARAM;

typedef struct _double_param_ {
    double param1;
    double param2;
}DOUBLE_PARAM;


typedef void* (*ADDFUNC)(void*);

void* int_add_func(void* wParam)
{
    INT_PARAM* lParam = (INT_PARAM*)wParam;
    int res = lParam->param1 + lParam->param2;
    return (void*)&res;
}

void* double_add_func(void* wParam)
{
    DOUBLE_PARAM* lParam = (DOUBLE_PARAM*)wParam;
    double res = lParam->param1 + lParam->param2;
    return (void*)&res;
}

void* add_func(ADDFUNC f, void* wParam)
{
    return f(wParam);
}

int test()
{
    INT_PARAM val1 = {10, 20};

    DOUBLE_PARAM val2 = {30.5, 40.5};

    void* res1 = add_func(int_add_func, &val1);
    int result1 = *((int*)res1);
    void* res2 = add_func(double_add_func, &val2);
    double result2 = *((double*)res2);


    return 0;
}


相關文章