2014-03-26 36 views
0

我想使用可變參數函數來進行包裝。但是,在Visual Studio 2013中,我從func_t func = va_arg(args, func_t);中得到了operand of sizeof may not be a function錯誤。不允許在C++中嵌套可變參數函數?或者是否有任何其他解決方案來完成這項工作?在C++中嵌套的可變參數函數

(我跳過A :: Outerfunc的冗餘部分)

int A::Outerfunc(int nargs, ...) { 

    if (nargs != 3) { 
     cout << "Wrong argument number: " << std::endl; 
     exit(1); 
    } 

    va_list args; 

    va_start(args, nargs); 
    typedef double func_t(int nargs, ...); 

    double *f = va_arg(args, double *); 
    func_t func = va_arg(args, func_t); 
    double *fprime = va_arg(args, double *); 

    va_end(args); 

    return 0; 
} 

回答

3

你只需要做出一個func_t指針到函數,而不是函數....

typedef double (*func_t)(int nargs, ...); 

請參閱http://ideone.com/cF48S7

+0

這是一個有趣的問題,但我迷失了試圖遵循您的解決方案:是不是傳入雙指針並將其作爲指向返回double的函數的指針進行檢索?需要可變數量的參數? – DigitalEye

+0

@DigitalEye:我不這麼認爲......第一次調用'va_arg(args,double *)'恢復第一個&d函數參數,然後'va_arg(args,func_t)'提取'&g'值,那麼最後的'* fprime = va_arg(args,double *)'會得到另一個指向'main'的'd'的指針。請記住'va_start(args,X)'安排'va_arg'在名爲'X'的參數之後轉換參數.... –