判断 C++ 中 vector<Nan::Callback*> 是否包含特定 JavaScript 函数引用
判断 C++ 中 vectorNan::Callback* 是否包含特定 JavaScript 函数引用
本文介绍两种方法来判断 C++ 中的 vectorNan::Callback* 是否包含与特定 Nan::Callback* 对象相同的 JavaScript 函数引用。
方法一:比较指针地址
可以遍历 vectorNan::Callback*,然后通过比较指针地址判断是否相同:
bool hasSameCallback(vector<Nan::Callback*>& callbacks, Nan::Callback* f1) {
for (auto& cb : callbacks) {
if (cb == f1) {
return true;
}
}
return false;
}
方法二:转换为 Local 并使用 ObjectWrap
另一种方法是将 vectorNan::Callback* 转换为 vector<Local
bool hasSameCallback(vector<Nan::Callback*>& callbacks, Nan::Callback* f1) {
vector<Local<Function>> jsCallbacks(callbacks.size());
for (int i = 0; i < callbacks.size(); i++) {
jsCallbacks[i] = Nan::New(*callbacks[i]);
}
void* f1Ptr = ObjectWrap::Unwrap<Function>(Nan::New(f1)->ToObject())->GetBoundFunction();
for (auto& cb : jsCallbacks) {
void* cbPtr = ObjectWrap::Unwrap<Function>(cb)->GetBoundFunction();
if (cbPtr == f1Ptr) {
return true;
}
}
return false;
}
原文地址: https://www.cveoy.top/t/topic/ope5 著作权归作者所有。请勿转载和采集!