указатель на функцию или функтор? генератор функций - PullRequest
2 голосов
/ 05 мая 2011

Я пытаюсь построить генератор полиномиальных функций, чтобы он взял вектор (произвольный размер) в качестве аргумента и сгенерировал полиномиальную функцию, которую я смогу использовать позже. Например,

,

poly_gen(vector<int> power_index)

возвращает функцию (или другим методом) в форме (которую я могу вызвать с другой функцией)

y(k)=a0+ a1*n+ a2*n^2 + a3*n^3 + ... + ak*n^k

, где a0, a1 .... ak хранятся в векторе-power_index

и позже я могу вызвать его с помощью

int calc_poly(int n)

, и этот calc_poly может вернуть мне число, вычисленное с использованием полиномиального выражения, сгенерированного poly_gen()

PS: я не знаю, как искать этот вопрос по ключевым словам.функция, конструкция, генератор, указатель, функтор ... не дали мне желаемых результатов.

спасибо всем!

Ответы [ 2 ]

5 голосов
/ 05 мая 2011

Вы не можете генерировать функции во время выполнения в C ++, поэтому вам придется использовать функтор.

Вы можете создать объект, который каким-то образом хранит коэффициенты, заданные power_index(возможно, прямая копия), и дайте ему оператор operator() (int n), который возьмет коэффициенты и вычислит значение полинома (правило Хорнера?).Затем вы можете свободно передавать этот объект.

Итак, вам нужен конструктор, внутреннее представление коэффициентов и operator(), который выполняет фактические вычисления.Должно быть достаточно просто.

1 голос
/ 05 мая 2011

Был хороший "розеттский камень" вопрос по (почти) этой самой проблеме некоторое время назад.

Там есть несколько ответов C ++: один, использующий boost :: lambda , другой, использующий более традиционный подход , и один, использующий MPL (а также C ++ 0x версия, которая, IMHO, была бы идеальным решением, если бы ваш компилятор ее поддерживал). Очевидно, что простой квадратик будет нуждаться в обобщении на произвольное число степеней, но это достаточно просто по сравнению с умением мыслить о концепции функционального объекта.

...