如何在C ++中将函数作为参数传递给函数

时间:2019-11-26 22:10:04

标签: c++ function arguments

我有一个方法(void DE(...),它根据一些数据点来查找函数y=f(x, a, b...)的参数。当我想使用具有其他数量参数的函数时,我需要注释第一个函数,然后编写第二个函数,每次使用(X.PAR[i][1],..., X.PAR[i][n])时都要添加此函数的func(y, x, param_1....param_n)个参数,如何使函数f(double x1, x2,...xn)成为函数DE的参数,所以我不需要更改其他功能的程序吗?

double f(double x1, x2,...xn){

}
void DE(int n){
 double A[n];
 fill(A) //some function that makes up values
 cout<<f(A[0], A[1],...A[n-1]);//if I change number of arguments in f, I also need to change it here
}

1 个答案:

答案 0 :(得分:0)

好的,有些事情:

  1. double A[n];可变长度数组不是标准的c ++,如果您真的要使用c数组,则必须以另一种方式(成本高,新的)来完成。
  2. 但是,您实际上并不想要c数组,只需要一个vector,它带走了您所有的问题。
  3. 如果您的需求比示例还要复杂,并且您很想使用此方法,则可以在您的方法中传递要调用的函数。

下面是第二点解决方案的示例,以及在第三点提出解决方案的提示。

#include <iostream>
#include <vector>
using namespace std;

void fill(vector<double> &vec)
{
    vec.push_back(12);
    vec.push_back(1.3);
    vec.push_back(4.7);
}

double f(const vector<double> &vec)
{
    double some_value = 1;
    for(double val:vec)
        some_value = some_value*val;
    return some_value;
}

double fn(double a1, double a2, double an)
{
    double some_value = 1;
    some_value = some_value*a1*a2*an;
    return some_value;
}
void DE()
{
   vector<double> A;
   fill(A); //some function that makes up values
   cout<<f(A)<<endl;
}
template<typename Func>
void DE2(Func func)
{
   double A[3];
   A[0] = 12;
   A[1] = 1.5;
   A[2] = 4.6;
   cout<<func(A[0], A[1], A[2])<<endl;
}

int main()
{
    DE();
    DE2(fn);
}