我正在尝试构建一个多项式函数生成器,因此它需要一个向量(任意大小)作为参数,并生成一个我以后可以使用的多项式函数。
例如,
poly_gen(vector<int> power_index)
以(我可以用另一个函数调用)的形式返回一个函数(或通过其他方法)
y(k)=a0+ a1*n+ a2*n^2 + a3*n^3 + ... + ak*n^k
其中a0,a1 .... ak存储在vector-power_index
中以后我可以用
来调用它int calc_poly(int n)
此calc_poly
可以返回一个数字,使用poly_gen()
生成的多项式表达式计算
PS: 我不知道如何通过关键词搜索这个问题。 功能,构造,发电机,指针,仿函数...... 没有给我预期的结果。
谢谢大家!
答案 0 :(得分:5)
你不能在C ++运行时生成函数,所以你必须使用仿函数。
您可以创建一个对象,以某种方式存储由power_index
给出的系数(可能是直接复制),并为其提供一个operator() (int n)
运算符,该运算符将获取系数并计算其值。多项式(霍纳的规则?)。然后你可以自由地传递那个对象。
因此,您需要一个构造函数,一个系数的内部表示,以及一个执行实际计算的operator()
。应该够简单。
答案 1 :(得分:1)
有一段很好的“rosetta stone”question(几乎)这个问题不久了。
有几个C ++答案:一个使用boost::lambda,一个使用conventional approach,一个使用MPL(以及C++0x版本,恕我直言如果你的编译器支持它是理想的解决方案)。显然,简单的二次方法需要推广到任意数量的幂,但这比在了解函数对象概念时要简单得多。