澄清函数指针

时间:2013-10-28 13:49:07

标签: c++ function function-pointers

int function_a () {
   int ret_a = call_a;
   int ret_b = call_b;
}

call_a和call_b的定义是这样的:

int call_a() {
  // Some 10 lines
  call_c();
}

int call_b() {
  // Same 10 lines
  call_d();
}

函数call_a和call_b之间的区别仅在于它们调用不同的函数。我开始知道函数指针是这种情况下的最佳方法。创建一个函数(只有call_a,而不是call_a和call_b),并将函数指针传递给call_c和call_d。我们怎样才能实现它?

希望我足够清楚,让你明白。

2 个答案:

答案 0 :(得分:5)

  

我们如何实现它?

void call_c();
void call_d();

int call_a(void (*c)()) {
  // Some 10 lines
  c();
}

int function_a () {
   int ret_a = call_a(&call_c);
   int ret_b = call_a(&call_d);
}

  

我开始知道在这种情况下函数指针是最好的方法

有时,事实并非如此。根据您的真实用例,使用lambdas可能更有意义!

template <typename Callable>
int call_a(Callable c) {
  // Some 10 lines
  c();
}

int function_a () {
   int ret_a = call_a([]() { call_c(); });
   int ret_b = call_a([]() { call_d(); });
}

答案 1 :(得分:2)

你可能正在寻找这个吗?

typedef void Subroutine();  //The signature of the function you want to call through pointer

int call_generic(Subroutine *subroutine)
{
  //10 lines
  soubroutine();
}

它将被称为:

int main()
{
  call_generic(&call_c);
  //or
  call_generic(&call_d);
}