gpt4 book ai didi

c++ - v8 不再支持 v8::Value::ToNumber 了吗?

转载 作者:行者123 更新时间:2023-11-30 04:43:36 29 4
gpt4 key购买 nike

我目前正在寻找带有 node-gyp 的 C++ 附加组件。

node-gyp configure 工作正常,但 node-gyp build 给出错误错误 C2661:“v8::Value::ToNumber”:没有重载函数采用 0 参数

有一些关于弃用的警告,它们提供了指向 v8.h 文件(在 node-gyp 中)的声明的链接。但是,关于 ToNumber 只有 V8_DEPRECATED 和 V8_WARN_UNUSED_RESULT。所以看起来错误是由于 v8.h 中没有关于 v8::Value::ToNumber 的定义导致的。

下面最后一行代码出现错误:

void someFunction(const FunctionCallbackInfo<Value>& args) {
Isolate *iso = args.GetIsolate();
if (args.Length() < 1) {
iso->ThrowException(Exception::TypeError(String::NewFromUtf8(iso, "Must provide Input")));
}

Local<Object> coords = args[0]->ToObject()->Clone(); // note that the keys are available with coords->GetOwnPropertyNames();
Local<Array> keys = coords->GetOwnPropertyNames();

if (keys->Length() != 2) {
iso->ThrowException(Exception::TypeError(String::NewFromUtf8(iso, "Need exactly 2 values")));
}

char props[2];
double values[2];

for (int i=0; i < 2; i++) {
String::Utf8Value key(keys->Get(i)->ToString());
props[i] = (*key)[0];
values[i] = coords->Get(keys->Get(i))->ToNumber()->Value();
}
...

我尝试阅读 nodejs 文档,但似乎没有关于删除 ToNumber 的证据。也找了相关的问题,但没有匹配我的:(

也许它与我的 Node 版本有关,但在测试 Node 版本之前我需要一些问题的答案..

我正在使用 Node :10.16.3 npm:6.9.0 node-gyp:5.0.3

感谢您的阅读。任何帮助表示赞赏!

最佳答案

这里是 V8 开发人员。您找不到删除 ToNumber 的证据因为它还没有被删除 ;-)

只是这个函数的无参数版本,曾经被弃用了一段时间,终于被放弃了。替换版本采用 Local<Context>作为参数,请参见此处:https://github.com/nodejs/node/blob/v10.16.3/deps/v8/include/v8.h#L2425

技术背景是ToNumber可以最终执行 JavaScript(例如,如果它是用 valueOf 方法在对象上调用的),并且执行 JavaScript 是特定于上下文的。用于 ToNumber 的上下文过去是隐式的,这很难推理,有时会导致嵌入端出现细微的错误;所以 V8 的"new"(过去几年)API 理念是使上下文参数显式化。您的嵌入应用程序越复杂,您(希望)越会欣赏代码的更明显结构。

ToString顺便说一句,在同一条船上。在这种情况下,无参数版本仍然存在,但已被弃用;替换为 ToString(Local<Context> context) .

关于c++ - v8 不再支持 v8::Value::ToNumber 了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58178620/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com