2016-09-10 50 views
2

我有一個函數指針與double(*)(void)類型,我想將其轉換爲給定數字參數的函數。如何從double(*)(void)轉換爲給定數量的參數的函數指針?

// already have function my_func with type double(*)(void) 
int para_num; 
para_num = get_fun_para_num(); // para_num can be 1 or 2 

if para_num == 1 
    cout << static_cast<double (*)(double)>(my_func)(5.0) << endl; 
else 
    cout << static_cast<double (*)(double, double)>(my_func)(5.0, 3.1) << endl; 

我可以確保演員表是否正確,是否有辦法在沒有if-else的情況下進行演員表演?

+1

簡短的回答是:沒有。 –

+0

對於類型BTW,答案將是相同的。 –

+0

我可以提供一個'switch'嗎? –

回答

0

假設這是一個非常不安全的方式來玩指針, 你可以用reinterpret_cast做到這一點。

這是一個完整的例子:

#include <iostream> 

/// A "generic" function pointer. 
typedef void* (*PF_Generic)(void*); 

/// Function pointer double(*)(double,double). 
typedef double (*PF_2Arg)(double, double); 

/// A simple function 
double sum_double(double d1, double d2) { return d1 + d2; } 

/// Return a pointer to simple function in generic form 
PF_Generic get_ptr_function() { 
    return reinterpret_cast<PF_Generic>(sum_double); 
} 

int main(int argc, char *argv[]) { 
    // Get pointer to function in the "generic form" 
    PF_Generic p = get_ptr_function(); 

    // Cast the generic pointer into the right form 
    PF_2Arg p_casted = reinterpret_cast<PF_2Arg>(p); 

    // Use the pointer 
    std::cout << (*p_casted)(12.0, 18.0) << '\n'; 

    return 0; 
} 
相關問題