修改作为输入传递的函数

时间:2013-12-03 02:08:59

标签: c++

我正在将一个函数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

2 个答案:

答案 0 :(得分:1)

您可以使用std::function和lambda函数轻松完成此类操作。否则会很困难,因为你无法传递额外的参数。

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

答案 1 :(得分:0)

StilesCrisis是正确的,lambda是一种很好的(如果不是最好的)解决方法。这是你可以做的:

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

如果您不熟悉此语法,建议您先阅读this article。特别要看一下“使用lambdas进行变量捕获”部分。