-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 の唯一の違いは、異なる関数を呼び出していることです。このような状況では、関数ポインターが最適なアプローチであることがわかりました。1 つの関数 (call_a と call_b の両方ではなく、call_a のみ) を作成し、関数ポインターを 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);
}

このような状況では、関数ポインターが最適なアプローチであることがわかりました

そうでない場合もあります。実際のユースケースによっては、ラムダを使用する方が理にかなっているかもしれません!

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 に答える