2014-01-16 59 views
2

是有函數指針任何可能性尋址功能具有不同的不相同的返回類型的參數,如果沒有任何替代將是有益..感謝預先函數指針尋址功能使用多個參數

例如:

struct method 
{ 
    char *name; 
    void (*ptr)(?); //? : what to define as arguments for this 
}; 

void fun1(char *name) 
{ 
    printf("name %s\n\r",name); 
} 
void fun2(char *name, int a) 
{ 
    printf("name %s %d\n\r",name,a); 
} 

//defined before main() 
method def[]= 
{ 
    {"fun1",fun1}, 
    {"fun2",fun2} 
} 
//some where in main() 
//call for function pointer 
def[1].ptr("try", 2); 
+1

對於具有相同函數簽名的函數,只能使用指針函數。 – RedX

+0

這看起來像一個解析問題一開始就失敗了:http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools –

回答

0
typedef void (*myfunc)(char *,int); 

struct method 
{ 
    char *name; 
    myfunc ptr; 
}; 

method def[]= 
{ 
    //we store fun1 as myfun 
    //type void(char*,int) and use it this way 
    {"fun1",(myfunc)fun1}, 
    {"fun2",fun2} 
}; 

這是理論不確定的行爲,但在現實中,它應該在大多數平臺
工作 *編輯 - >這適用於所有平面,就像printf(con st char *,...)。

0

解決方案#1:

void fun1(char *name, ...); 
void fun2(char *name, ...); 

解決方案2:

method def[]= 
{ 
    {"fun1",printf}, 
    {"fun2",printf} 
} 
+0

當然,在第一個解決方案中,你將不得不努力工作這兩個函數的內部實現 –

+0

如果在某些函數中沒有參數。 –