C++ 将函数作为参数传递。C++;

C++ 将函数作为参数传递。C++;,c++,function,pointers,C++,Function,Pointers,我知道这个问题可能重复了很多次,但我不明白他们的答案。现在我们开始: 我有一个类型为double*的数组,它作为名为arr的指针传递,数组的大小作为int-arrsize参数传递。现在,这里是我感到困惑的地方,我想使用参数val对数组中的元素执行函数指针typeOfOper指定的操作 void fnooper(double*arr,int-arrsize,void(*typeOfOper)(double*,int,const-double),const-double val); 我还有四个执行

我知道这个问题可能重复了很多次,但我不明白他们的答案。现在我们开始:

我有一个类型为
double*
的数组,它作为名为
arr
的指针传递,数组的大小作为
int-arrsize
参数传递。现在,这里是我感到困惑的地方,我想使用参数
val
对数组中的元素执行函数指针
typeOfOper
指定的操作

void fnooper(double*arr,int-arrsize,void(*typeOfOper)(double*,int,const-double),const-double val);
我还有四个执行不同类型操作的函数(
add
subtract
divide
multiply
)。同样,根据传递的操作类型(
typeOfOper
),该函数将执行其他四个函数之一


如果有人能指导我,让我知道我能做什么,我将不胜感激。谢谢您的时间。

下面是一个使用示例。我可以使用指向本地函数
operSum
operSubstract
的指针调用函数
foper
,如下所示:

//使用sum调用
fnOper(arrList,arrListSize,operSum,15.3);
//使用减法调用
fnOper(arrList,arrListSize,operSubstract,15.3);
以下是完整的编译示例:

#包括
void oper substract(双*a,int sizeOfa,常数双z){

对于(int i=0;i我们通常可以使用
std::function
来保存函数和类似函数的对象。最大的优点是不再需要单独的
const double val

void fnOper(double *arr, size_t len, std::function<void(double*, size_t)> fun)
{
  fun(arr, len); // Simple
}

template <size_t LEN>
void fnOper(double (&arr)[LEN], std::function<void(double*, size_t)> fun)
{
  fun(arr, LEN); // Can also work on arrays
}
void add5 (double* ptr, size_t len) { 
   for (size_t i = 0; i != len; ++i) ptr[i] += 5.0;
}
double d[] = { 2.0,3.0,4.0 }
fnOper(d, add5)
void fnOper(双*arr,尺寸长度,标准::功能乐趣)
{
有趣(啊,伦);//简单
}
模板
无效fnOper(双重(&arr)[LEN],标准::函数乐趣)
{
fun(arr,LEN);//也可以在数组上工作
}
无效添加5(双*ptr,尺寸长度){
对于(尺寸i=0;i!=len;++i)ptr[i]+=5.0;
}
双d[]={2.0,3.0,4.0}
fnOper(d,add5)

但是我们通常不会编写这样的代码-当我们想要循环数组、向量或列表时,已经有了
std::transform

不清楚这里的障碍是什么?我看不出有什么真正的问题,你只需调用给定的函数?从一个函数开始构建一个示例只需在参数中键入函数名,而不必重复当你调用
fOper
时。我正在尝试学习如何将函数作为参数传递,所以这是我自己能做的最简单的方法。天哪,我真是个白痴。老实说,出于某种原因,我无法理解它。看起来很愚蠢,但感谢你的回答。欢迎你成为我的朋友。