我想在使用V8引擎的嵌入式JavaScript应用程序中实现此功能。在HashMap中存储对象的句柄或在Google的V8引擎中设置
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()
,因为结果不能保证是唯一的。
我也不能只存储在std::set
本地,因为复制构造函数是私人的,它也会得到一次removeCallback或addCallback返回。
感谢您提前提供任何帮助。
编辑:我意识到我可以写一些JavaScript来为我做函数散列,然后调用一个C++绑定函数遍历所有回调函数,但我宁愿不要每次需要存储集合时都这样做或JavaScript对象的哈希值。
更好地编辑您的问题与@robot_guy作为其更难以错过的评论。 – Amicable