Я пытаюсь установить указатель функции, который устанавливается во время выполнения на основе набора пользовательских параметров. Я хотел бы, чтобы указатель функции указывал на нестационарную функцию-член, но я не могу найти, как это сделать.
Примеры, которые я видел, говорят, что это можно сделать только с помощью статической функции-члена или использовать глобальные переменные в прямой 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, но у меня не было опыта ни с одним из них. Я надеюсь, что мне не нужно погружаться в них и что я просто что-то пропустил.
Компилятор MSVС++ 2008