包装 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);
}))
;
我想围绕 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);
}))
;