小编Owe*_*enM的帖子

如何将双参数函数"转换"为单参数函数?

在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::bindlambda解决方案,但似乎仍然运行到错误,至于参数的个数.

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)

c c++ matlab lambda function-binding

5
推荐指数
2
解决办法
350
查看次数

标签 统计

c ×1

c++ ×1

function-binding ×1

lambda ×1

matlab ×1