-1
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。我们怎样才能实现它?

希望我足够清楚以使您理解。

4

2 回答 2

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);
}

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

有时,它不是。根据您的真实用例,使用 lambda 可能更有意义!

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(); });
}
于 2013-10-28T13:51:47.353 回答
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);
}
于 2013-10-28T13:54:03.653 回答