Я хочу использовать boost :: bind (я не уверен, что это действительно правильное решение моей проблемы), чтобы создать оболочку для функции, которая принимает один или два аргумента, тогда как оболочка принимает только один аргумент и фиксирует другое к некоторому постоянному значению. Мои функции выглядят как
double f(double a, double b)
{
return a/b;
}
или
double g(double b)
{
return 2*b; // b+b?
}
В моем коде у меня есть typedef для функции с одним аргументом:
typedef boost::function<double (double)> callback;
и моя идея состояла в том, чтобы создать обертку функции с этим:
callback cb;
cb = boost::bind(f, _1, 2)(x);
чтобы я мог вызвать третью функцию, которая использует упакованную функцию, переданную в аргументах:
double use(callback cb, double x, double y)
{
return cb(x0) - y0;
}
У меня около 30 функций с одним или двумя аргументами, и первый или второй должны быть константами. Эта константа не известна use()
, но алгоритм, реализованный в use
, работает с каждой функцией.
Когда я пытаюсь скомпилировать свой код, я получаю сообщение об ошибке для строки cb = boost::bind(f, _1, 2)(x);
:
'* f' cannot be used as a function
Когда я пытаюсь использовать привязку напрямую, как в cout << boost::bind(f, _1, 2)(x);
, я не получаю сообщение об ошибке.
Что я тут не так сделал?