Я использую boost::bind для создания составных функций «на лету» и надеюсь сохранить объект как некоторую переменную-член класса для последующего использования. Например, у нас есть два функтора:
struct add{double operator()(double x, double y) const{return x+y;};};
struct multiply{double operator()(double x, double y) const{return x*y;};};
Затем, чтобы создать функцию f(x,y,z) = (x+y)*z, я могу сделать следующее:
auto f = boost::bind<double>(multiply(), boost::bind<double>(add(), _1, _2), _3);
И вызов f(x,y,z) работает отлично. Теперь я хочу сохранить f как переменную-член класса, что-то вроде следующего:
struct F
{
auto func;
double operator(const std::vector<double>& args) const
{
return func(args[0],args[1],args[2]); //Skipping boundary check
}
}
F f_obj;
f_obj.func = f;
f_obj(args);
Но, конечно, я не могу объявить переменную auto. Есть ли способ обойти это?
Обратите внимание, что я не использую boost::function, так как это сильно повлияет на производительность, что для меня важно.
Спасибо за любой совет.