修改作为输入传递的函数

Modifying a function passed as input

本文关键字:函数 输入 修改      更新时间:2023-10-16

我将一个函数f传递给另一个函数SInf,但我在SInf中调用f的20多次都是调用f(1./x)/(x*x)

有没有一种方法可以实现另一个函数,比如g(x)=f(1./x)/(x*x)?虽然我想不需要完成我需要做的事情,但这将极大地提高代码的可读性。

我宁愿没有SInf外部的类或结构,因为我希望它能够替换类似的函数。

double SInf(double (*f)(double), int N, double aa, double bb, bool closed=true)
{
            struct functions{
             double fi(double x){return f(1./x)/(x*x);}
     };
     //bla bla lots of code
}

给我

error: use of parameter from containing function

使用std::function和lambda函数可以很容易地完成这样的操作。否则会很困难,因为您将无法传递额外的参数。

如果你正在编写一个简单的单线程应用程序,你仍然可以使用常规函数指针并通过全局变量传递额外的状态,但当程序变得复杂时,这种情况会很快崩溃。

StilesCrisis认为lambdas是解决这一问题的好方法(如果不是最好的话)是正确的。以下是您可以做的:

//define a function g
auto g = [&f] (double _x) {return f(1./_x)/(_x*_x);};
//call g
g(x);

如果你不熟悉这个语法,我建议你先读这篇文章。特别是,请看一下"使用lambdas捕获变量"部分。