判断 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>,然后使用 node-addon-api 的 ObjectWrap 类的 Unwrap 方法获取 js 对象的指针地址,最后比较指针地址判断是否相同:

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;
}
判断 C++ 中 vector<Nan::Callback*> 是否包含特定 JavaScript 函数引用

原文地址: https://www.cveoy.top/t/topic/ope5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录