2015-11-01 72 views
1

我想實現這樣的事情:Ç - 傳遞未知PARAMS功能到另一個功能,並調用它

void sum(int a, int b){ printf("result: %d", a+b); } 

void callFunc(void (*funct)(...), ...) 
{ 
    va_list ars; 

    va_start(ars, funct); 
    funct(ars); 
    va_end(ars); 
} 

int main() 
{ 
    callFunc(sum, 2,3);   

    return 0; 
} 

但是,這並不工作,由於需要兩個va_list S,爲funct傳遞參數和參數。但是,即使我試圖通過總和功能,它說:error: invalid conversion from 'void (*)(int, int)' to 'void (*)(...)'

那麼如何使這個工作好老C型?

+0

,如果你想將它保留到C你爲什麼標籤這個C++? – Cornstalks

回答

3

你不能這樣做。這根本不可能。

你可以做的最好的(同時保持它的通用性)是改變funct採取va_list,很像vprintf。但是這可能不適合你的目的。

或者,你可以做一個宏:

#include <stdio.h> 

#define CALL_FUNC(func, ...) func(__VA_ARGS__) 

void sum(int a, int b){ printf("result: %d", a+b); } 

int main() 
{ 
    CALL_FUNC(sum, 2, 3);   

    return 0; 
}