包装 C++ 成员函数指针 (Emscripten)

Wrapping a C++ Member Function Pointer (Emscripten)

我想围绕 C++ 成员函数创建一个包装器,它在调用实际成员函数之前执行一些额外的任务。我正在使用 Emscripten,下面的示例使用的是 .function function.

假设我有一个名为 SomeClass 的 class(我不“拥有”它,即它来自第三方库),只有一个静态成员函数:

class SomeClass {
public:
  void test(int& number) {
    number++;
  }
};

通常,我会像这样使用 Embind 创建 Emscripten 绑定:

class_<SomeClass>("SomeClass")
  .function("test", 
    &SomeClass::test
  )
;

但是,我想对该方法使用包装器,就像这样(C++ - JS - 伪代码)

class_<SomeClass>("SomeClass")
  .function("test", 
    &((this) => {
      int i = 0;
      this->test(i);
    })
  )
;

这有可能吗?任何帮助将不胜感激!

我明白了。 Emscripten 似乎在设计时就考虑到了这样的用例,并提供了 specialization of the RegisterClassMethod struct for std::function.

使用下面的代码,我可以实现我想做的事情。

class_<SomeClass>("SomeClass")
  .function("test", std::function<void(SomeClass&)>([](SomeClass& s) {
    int i = 0;
    s.test(i);
  }))
;