如何从double(*)(void)转换为具有给定参数个数的函数指针?

时间:2016-09-10 12:15:29

标签: c++ casting void-pointers

我有一个带有类型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 :(得分: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;
}