Я пишу программу, в которой я хочу иметь возможность в конечном итоге выполнять некоторые стандартные операции (такие как +, -, *) над double
- double
функциями (double
- double
функции Я имею в виду вещи, которые принимают одно значение типа double
и выделяют что-то другое типа double
, будь то жестко запрограммированные или лямбда-выражения). Поэтому я хотел бы, чтобы были возможны следующие примеры:
#include <functional>
double f(double x)
{
return x + 5;
}
double g(double x)
{
return 2 * x;
}
int main()
{
std::function<double(double)> h = f + g;
std::function<double(double)> h_ = (f - g) * 5;
std::function<double(double)> h__ = f * g;
return 0;
}
Я пробовал что-то вроде следующей формы, но компилятору все еще не нравится, когда я добавляю две вещи типа double(double)
вместе.
std::function<double(double)> operator+(std::function<double(double)> &f, std::function<double(double)> &g)
{
return [=](double x)->double{ return f(x) + g(x); };
}
Есть ли что-то очевидное, чего мне не хватает, что могло бы помочь этому сработать? В качестве текущего обходного пути я вызываю функцию формы и вызываю ее с правильными аргументами, но не могу заставить ее работать естественным образом с операторами.
std::function<double(double)> add_two_functions(std::function<double(double)> &f, std::function<double(double)> &g)
{
return [=](double x)->double{ return f(x) + g(x); };
}