在matlab中,人们可以写:
S = @(x,y) x^2+y^2-1
G = @(x) S(x,1);
Run Code Online (Sandbox Code Playgroud)
如果我有一个期望单参数函数的函数,我可以做到以上几点.我怎么能用c/c ++做到这一点?
我有一个库函数(来自CGAL库),它希望作为一个参数,一个函数本身只有一个参数.理想情况下,我有一个class(SphericalHarmonics),我希望有一个成员函数,它接受一个参数.所以我有:
FT SphericalHarmonics::distFunction(Point_3 p)
Run Code Online (Sandbox Code Playgroud)
(注意这FT是一个类似的类型double)但当然我尝试的时候
SphericalHarmonics *sh = new SphericalHarmonics(1);
Surface_3 surface(sh->distFunction, Sphere(ORIGIN,2.));
Run Code Online (Sandbox Code Playgroud)
this也被视为参数,我的distFunction函数是一个双参数函数,并抛出一个错误.
请注意,这可以通过全局变量来解决,即
SphericalHarmonics *sh;
FT dist_function(Point_3 p) {
return sh->distFunction(p);
}
main() {
sh = new SphericalHarmonics(1);
Surface_3 surface(dist_function);
}
Run Code Online (Sandbox Code Playgroud)
但是,这真的不理想.我想要一种没有全局变量的方法,因为能够拥有一个可以轻松地与CGAL库集成的类函数会好得多.
提前致谢!
[更新]
@安迪警车:我想你std::bind和lambda解决方案,但似乎仍然运行到错误,至于参数的个数.
当main我在使用代码时:
SphericalHarmonics *sh = new SphericalHarmonics(cInit, numL, symm);
auto fxn = std::bind(&SphericalHarmonics::distFunction, sh, std::placeholders::_1);
Surface_3 surface(fxn, Sphere_3(ORIGIN,2.)); …Run Code Online (Sandbox Code Playgroud)