我想在使用 v8 引擎的嵌入式 JavaScript 应用程序中实现此功能。
function myFunction1() {
//do stuff
}
function myFunction2() {
//do other stuff
}
myAddon.addCallback(myFunction1);
myAddon.addCallback(myFunction2);
myAddon.removeCallback(myFunction1);
为了做到这一点,我需要std::set
像这样存储这些功能
void addCallback(const v8::FunctionCallbackInfo<v8::Value>& args) {
v8::HandleScope scope(args.GetIsolate());
v8::Local<v8::Function> cb = v8::Local<v8::Function>::Cast(args[0]);
std::set mySet = this->mySet;
//now how do I insert a reference to this function into mySet so I can retrieve
//it later
}
void removeCallback(const v8::FunctionCallbackInfo<v8::Value>& args) {
v8::HandleScope scope(args.GetIsolate());
v8::Local<v8::Function> cb = v8::Local<v8::Function>::Cast(args[0]);
std::set mySet = this->mySet;
//now how do I remove the element in this set that refers to this function?
}
如何做到这一点?我不想使用v8::Object::GetIdentityHash()
,因为不能保证结果是唯一的。
我也不能只将 Local 存储在中,std::set
因为复制构造函数是私有的,并且一旦 removeCallback 或 addCallback 返回它也会被取消作用域。
感谢您提前提供任何帮助。
编辑:我意识到我可以编写一些 javascript 来为我做函数散列,然后调用一个 C++ 绑定函数来迭代所有回调,但我不想每次需要存储 JavaScript 集或散列时都这样做对象。