我正在将一个函数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
答案 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进行变量捕获”部分。