我正在尝试设置一个在执行期间根据一组用户参数设置的函数指针。我想让函数指针指向一个非静态成员函数,但我找不到怎么做。
我见过的例子说这只能用静态成员函数来完成,或者在直接 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”,以便“打印”仍然可以使用它。
据我所知,建议是使用 boost 或 std::bind 但我对这两种方法都没有经验。我希望我不需要深入研究这些,我只是错过了一些东西。
编译器 MSVC++ 2008