微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Nodejs C++ 插件:无法访问数组元素

如何解决Nodejs C++ 插件:无法访问数组元素

我想从js端访问作为arg传入函数的数组元素。 代码是这样的:

void Method(const FunctionCallbackInfo<Value> &args){
    Isolate* isolate = args.GetIsolate();
    Local<Array> array = Local<Array>::Cast(args[0]);

    for(int i=0;i<(int)array->Length();i++){
        auto ele = array->Get(i);
    }

我收到此错误

 error: no matching function for call to ‘v8::Array::Get(int&)’

阅读 V8 Array 的实现后,我了解到 Get 没有 Array 方法

这是v8源代码Array的实现:

class V8_EXPORT Array : public Object {
 public:
  uint32_t Length() const;

  /**
   * Creates a JavaScript array with the given length. If the length
   * is negative the returned array will have length 0.
   */
  static Local<Array> New(Isolate* isolate,int length = 0);

  /**
   * Creates a JavaScript array out of a Local<Value> array in C++
   * with a kNown length.
   */
  static Local<Array> New(Isolate* isolate,Local<Value>* elements,size_t length);
  V8_INLINE static Array* Cast(Value* obj);
 private:
  Array();
  static void CheckCast(Value* obj);
};

我是 v8 库的新手。我浏览了一些教程,对他们来说效果很好。谁能帮我弄清楚它有什么问题?如果我们不能使用 Local<Array> 那么还有什么可以实现这个目的?

解决方法

如果不知道您的目标是哪个 v8 的确切版本,就很难回答,但在当前的 doxygen 文档中,v8::Object::Get 有两个重载:

MaybeLocal< Value >     Get (Local< Context > context,Local< Value > key)
MaybeLocal< Value >     Get (Local< Context > context,uint32_t index)

所以我认为您可以执行以下操作:

Local<Context> ctx = isolate->GetCurrentContext();
auto ele = array->Get(ctx,i);
...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。