0

以下のコードはコンパイルされません。この関数fooは、関数ポインターfを引数としてf取り、厳密に 1 つの int を引数として取り、int を返します。この例では、常に引数 でfoo呼び出します。が評価されるときに、他のパラメーターと組み合わせて評価されるように関数を渡したいと思います。ただし、引数として 2 つの int を持つ関数を渡すことはできません(この問題は、実際の問題の類推です)。f3foof(3)foo

#include <iostream>

void foo(int(*f)(int))
{
  std::cout << f(3) << std::endl;
}

struct plusX
{
  plusX(int x_) : x(x_) {}
  int x;
  int plus(int y)
  {
    return x + y;
  }
};

int main()
{
  plusX px4(4);
  foo(&px4.plus);  // ERROR!
}

ISO C++ では、バインドされたメンバー関数のアドレスを取得して、メンバー関数へのポインターを形成することを禁止しています。「&plusX::plus」と言います

4

1 に答える 1