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