我有一个方法(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
}
答案 0 :(得分:0)
好的,有些事情:
double A[n];
可变长度数组不是标准的c ++,如果您真的要使用c数组,则必须以另一种方式(成本高,新的)来完成。vector
,它带走了您所有的问题。 下面是第二点解决方案的示例,以及在第三点提出解决方案的提示。
#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);
}