Как перегрузить арифметические операторы (+, *, -, /) для функций в c ++? - PullRequest
0 голосов
/ 07 мая 2019

Я хотел бы реализовать числовой интеграл, подынтегральное выражение которого оценивается в квадратурных точках. Поэтому что-то вроде: integral(domain, f), где domain - это действительно область, в которую я хочу интегрировать, а f - это функция для интеграции. f является только функцией Point p (квадратурные точки) внутри области и может иметь векторные значения (скаляр является частным случаем).

Поскольку функция f, как правило, может быть комбинацией различных функций, мне интересно, как перегрузить арифметические операторы для функций.

Я уже нашел это Реализация оператора умножения для математических функций C ++ но это не охватывает мой вопрос, потому что Function возвращает только x, в то время как в моем случае я хотел бы иметь разные функции, которые могут возвращать более сложную функцию x.

Итак, пусть f_1,...f_N будут разными функциями, которые имеют одинаковый тип возврата, например, std::array<double,M> с заданной длиной M, и которые получают один и тот же вход Point p, то есть для I = 1, ..., N:

std::array<double,M> f_i(Point p)
      { std::array<double,M> x; 
        \\ compute x somehow depending on i
        return x;}

Тогда я бы хотел создать f как комбинацию предыдущих f_1,...f_N, например. f=f_1 *f_2+(f_3*f_4)*f_5... (здесь операции должны быть компонентными).

Таким образом, я мог бы оценить f (p) внутри integral(domain, f), получая точно для каждой квадратурной точки:

f_1(p) *f_2(p)+(f_3(p)*f_4(p))*f_5(p)...

Edit: Я знаю, что должен использовать функторы, а не простые функции (которые я использовал только для постановки задачи), но я не могу понять, как это сделать. Любой намек?

Спасибо

...