尊敬的会员   
网站首页 >> 综合资讯 >> 文章内容

NodeJS和C++之间的类型转换

[日期:2023-11-08]   来源:  作者:   阅读: 0[字体: ]
  我们团队非常喜欢Node.js,但是当涉及到计算密集型的场景时 Node.js 就不能够很好地胜任了。而在这样的情况下 C++ 是一个很好的选择,非常幸运 Node.js 官方提供了C/C++ Addons 的机制让我们能够使用 V8 API 把 Node.js 和 C++ 结合起来。

  虽然在 Node.js 官方网站有很多的关于怎么使用这些 API 的文档,但是在 JavaScript 和 C++ 之间传递数据是一件非常麻烦的事情,C++ 是强类型语言(”1024” 是字符串类型而不是整数类型),而 JavaScript 却总是默认的帮我们做一些类型转换。

  JavaScript 的基本类型包括 String,Number,Boolean,null,undefined,V8 使用类继承的方式来定义这类型,这些类型都继承了 Primitive 类,而 Primitive 继承了 Value,v8 也支持整型(包括 Int32 和 Uint32),而所有的类型定义都可以从 V8 类型文档中看到,除了基本的类型,还有 Object,Array,Map 等类型的定义。

  基本类型的继承关系如下图:
NodeJS和C++之间的类型转换   在 V8 中所有 JavaScript 值都是被放在 Local 对象中,通过这个对象指定了 JavaScript 运行时的内存单元。

  下面这段代定义了一个 Number 类型的值,其中 Test 函数中声明的 isolate 变量代表着 V8 虚拟机中的堆内存,当创建新变量的时候就需要用到它,接下来的一行代码就通过 isolate 声明了一个 Number 类型的变量。
#include <node.h> #include <v8.h>  using namespace v8;  void Test(const v8::FunctionCallbackInfo& args) {     Isolate* isolate = args.GetIsolate();     // 声明变量     Local retval = v8::Number::New(isolate, 1000); }  void init(Local 
相关评论
赞助商链接
赞助商链接