Node.js C ++ Addon - 设置数组的某个索引

时间:2017-04-13 21:15:57

标签: c++ node.js v8 fibonacci node.js-addon

我正在尝试创建一个Node.js C ++ Addon,它生成Fibonacci序列以将其速度与普通的Node.js模块进行比较,但是我在设置数组的某个索引时遇到了问题。到目前为止我已经有了这个:

#include <node.h>

namespace demo {

using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::Value;
using v8::Number;
using v8::Array;

void Method(const FunctionCallbackInfo<Value>& args) {
    Isolate* isolate = args.GetIsolate();

    int next, first = 0, second = 0, c = 0, n = args[0]->NumberValue();
    Local<Array> arr = Array::New(isolate, n);

    for (; c < n; c++) {
        if ( c <= 1 ) next = c;
        else {
            next = first + second;
            first = second;
            second = next;
        }
        // How to set arr[c]?????
    }

    args.GetReturnValue().Set(arr);
}

void init(Local<Object> exports) {
    NODE_SET_METHOD(exports, "fib", Method);
}

NODE_MODULE(addon, init)

}

在第26行,我该如何设置arr[c]v8:Array不提供下标运算符。

1 个答案:

答案 0 :(得分:1)

  

我该如何设置arr [c]? v8:数组没有提供下标运算符。

它没有,但是v8::Array已经从v8::Object继承了函数成员Set,其重载带有一个整数(uint32_t)用于密钥。用它来填充数组的每个元素:

void Method(const FunctionCallbackInfo<Value>& args) {
    Isolate* isolate = args.GetIsolate();

    int next, first = 0, second = 0, c = 0, n = args[0]->NumberValue();
    Local<Array> arr = Array::New(isolate, n);

    int i = 0;
    for (; c < n; c++) {
        if ( c <= 1 ) next = c;
        else {
            next = first + second;
            first = second;
            second = next;
        }
        arr->Set(i++, Number::New(isolate, next));
    }

    args.GetReturnValue().Set(arr);
}