ユーザーパラメーターのセットに基づいて実行中に設定される関数ポインターをセットアップしようとしています。関数ポインターが非静的メンバー関数を指すようにしたいのですが、その方法が見つかりません。
私が見た例では、これは静的メンバー関数のみでのみ実行できるか、ストレート C でグローバル変数を使用できると述べています。
簡単な例を次に示します。
class CA
{
public:
CA(void) {};
~CA(void) {};
void setA(double x) {a = x; };
void setB(double x) {b = x; };
double getA(const double x) {return x*a; };
double getB(const double x) {return x*b; };
void print(double f(const double), double x) {
char cTemp[256];
sprintf_s(cTemp, "Value = %f", f(x));
std::cout << cTemp;
};
private:
double a, b;
};
実装部分は
CA cA;
cA.setA(1.0);
cA.setB(2.0);
double (*p)(const double);
if(true) {
p = &cA.getA; //'&' : illegal operation on bound member function expression
} else {
p = cA.getB; //'CA::getB': function call missing argument list; use '&CA::getB' to create a pointer to member
//'=' : cannot convert from 'double (__thiscall CA::* )(const double)' to 'double (__cdecl *)(const double)'
}
cA.print(p, 3.0);
では、p が「getA」または「getB」を指すようにして、「print」で引き続き使用できるようにするにはどうすればよいでしょうか。
私が見たところ、boost または std::bind を使用することをお勧めしますが、これらのいずれも使用したことがありません。これらに飛び込む必要がなく、何かが足りないことを願っています。
コンパイラ MSVC++ 2008