Включение указанной пользователем функции

В настоящее время я пишу программное обеспечение для моделирования. У меня есть относительно сложный оператор для вычисления с несколькими параметрами. Одним из параметров может быть указанная пользователем нелинейная функция. Что-то вроде:

double op(double param1, double param2, ..., function<double(double)> fct){
...
}

Поскольку функция будет вызываться несколько раз, я бы хотел, чтобы компилятор включил функцию. К счастью, функция может быть жестко закодирована при вызове op, Су я всегда буду иметь что-то вроде op(1.0, 2.0, ..., nonlinear1) где nonlinear1 это имя функции, а не переменная или что-то еще.

Я думал о двух идеях:

  1. Указатель на функцию double (*)(double): Не сработает.
  2. Параметр шаблона:

Следующее:

template <function<double(double)> FCT>
double op(double param1, double param2, ...){
...
double a = FCT(param2);
...
}

На первый взгляд, это работает, но знает ли компилятор функцию, стоящую за объектом FCT, или он просто видит указатель на функцию и спецификацию возврата / аргумента?

Как еще я могу достичь того, чего хочу?

0

Решение

Вы можете использовать обычный параметр шаблона, например:

template <typename FUNCTOR>
double op(double param1, double param2, ..., FUNCTOR fct){
...
}
0

Другие решения


По вопросам рекламы [email protected]