假设我有一个多项式函数f(x),我想将此表达式用于表达式g(x)或h(x),具体取决于用户选择的内容。这可能吗?
例如
int main() {
float fexpression = /* polynomial function f(x) here */;
/* some code where user picks g(x) or h(x) */
if (/* gexpression == true */)
cout << gfunction(fexpression);
else /* h expression == true */
cout << hfunction(fexpression);
return 0;
}
float gfunction(float j){
float var = /* some function representing g(f(x)) == g(j) */;
return var;
}
float hfunction(float j){
float var = /* some function representing h(f(x)) == h(j) */;
return var;
}
我觉得我可以传递一个表达式的变量,例如
float fexpression = ....
答案 0 :(得分:3)
您需要function pointer。
使表达式成为函数。
float fexpression( float x )
{
return (5*(pow(x,4))) + (3*(pow(x, 3))) + (10 * x) - 5
}
这段代码,正如你所写,然后将传递功能本身。
if (/* gexpression == true */)
cout << gfunction(fexpression);
else /* h expression == true */
cout << hfunction(fexpression);
答案 1 :(得分:3)
我试图在Drew的答案的评论部分解释这个细节,但它在格式化中丢失了......所以不得不开始另一个答案。
@ DrewDorman说你需要将表达式定义为函数是正确的:
float fexpression( float x )
{
return (5*(pow(x,4))) + (3*(pow(x, 3))) + (10 * x) - 5
}
缺少(对你而言)以下内容(您可以通过阅读Drew的链接获得...):
按以下方式定义gfunction
(例如)
float gfunction(float (*funcp)(float)) {
// lots of stuff to determine the value of x
return (*funcp)(x);
}
这就是gfunction如何评估你的多项式。为hfunction
当您调用gfunction时,您必须按如下方式引用fexpression
:
cout << gfunction(&fexpression);
&
很重要...... Drew的回答也没有。