如何将表达式作为参数/参数传递?

时间:2013-02-07 03:28:09

标签: c++ function parameters arguments expression

假设我有一个多项式函数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 = ....

2 个答案:

答案 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的回答也没有。