В настоящее время я пишу программное обеспечение для моделирования. У меня есть относительно сложный оператор для вычисления с несколькими параметрами. Одним из параметров может быть указанная пользователем нелинейная функция. Что-то вроде:
double op(double param1, double param2, ..., function<double(double)> fct){
...
}
Поскольку функция будет вызываться несколько раз, я бы хотел, чтобы компилятор включил функцию. К счастью, функция может быть жестко закодирована при вызове op
, Су я всегда буду иметь что-то вроде op(1.0, 2.0, ..., nonlinear1)
где nonlinear1
это имя функции, а не переменная или что-то еще.
Я думал о двух идеях:
double (*)(double)
: Не сработает.Следующее:
template <function<double(double)> FCT>
double op(double param1, double param2, ...){
...
double a = FCT(param2);
...
}
На первый взгляд, это работает, но знает ли компилятор функцию, стоящую за объектом FCT, или он просто видит указатель на функцию и спецификацию возврата / аргумента?
Как еще я могу достичь того, чего хочу?
Вы можете использовать обычный параметр шаблона, например:
template <typename FUNCTOR>
double op(double param1, double param2, ..., FUNCTOR fct){
...
}