C++函数指针指向非静态成员函数

sf6xfgos  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(80)

此问题在此处已有答案

How can I pass a member function where a free function is expected?(9个答案)
Passing non-static member function as parameter of function(4个答案)
2天前关闭。
我有两个班:MeshInputVoxelGridVoxelGrid有一个成员sdf,它是一个函数指针。现在我想把另一个类的一个非静态函数赋值给sdf。我不能改变任何一个的签名,因为sdf有时也指向MeshInput之外的一个函数。我怎么做?
代码如下:

class VoxelGrid {
 private:
  double (*sdf)(tg::pos3 const&);
}

class MeshInput {
 public:
  double sdfFromMesh(tg::pos3 const& point);
}

字符串
根据我的理解,问题是当用函数指针调用函数时,没有像从对象(A.sdfFromMesh())调用它时那样的隐式this*指针。

hfwmuf9z

hfwmuf9z1#

您可以使用std::functionstd::bind配合使用。
std::bind可以指定要保留的目标函数及其所属位置。例如:

struct Foo
{
    double get(tg::pos3 const&) { return 0; }
};

字符串
然后你可以像这样将get绑定到你的变量:

std::function<double ( tg::pos3 const& )> sdf = std::bind(&Foo::get, &YourFooObj, std::placeholders::_1)


请参阅std::bindstd::function了解更多详细信息。

相关问题