首页 > 解决方案 > 理解 Node.js 的 napi_value 类型的定义

问题描述

我查看了标题内部以了解该类型napi_value的实际实现方式,但我根本不明白。(我的 C 和 C++ 知识有限)你能帮我理解发生了什么吗?

>> node_api.h
...
#include "napi_types.h"
...
typedef napi_value (*napi_addon_register_func)(napi_env env,
                                           napi_value exports);
...

>> node_api_types.h
...
// JSVM API types are all opaque pointers for ABI stability
// typedef undefined structs instead of void* for compile time type safety
typedef struct napi_value__ *napi_value;
...
typedef napi_value (*napi_callback)(napi_env env,
                                napi_callback_info info);

这让我很困惑......第一个和第三个 typedef 对我来说看起来像函数签名,除了名称是一个指针,即我对函数签名的想法是这样的:

typedef void function_SIG(void *a,void *b);
function_SIG *functionA_ptr; 
function_SIG *functionB_ptr;

源代码可在 github 上找到:

https://github.com/nodejs/node/blob/master/src/node_api.h https://github.com/nodejs/node/blob/master/src/node_api_types.h


我下载并搜索了整个 repo ( https://github.com/nodejs/node )napi_value__但它只找到了这个参考......也许它是用一些 V8 引擎的东西编译的?

标签: c++cnode.js

解决方案


第一个和第三个没有定义napi_value。第一个定义napi_addon_register_func. 第三个定义napi_callback

这一行:

typedef struct napi_value__ *napi_value;

定义napi_value为指向 a 的指针struct napi_value__


“不透明”意味着(通常)该结构在库中定义,但未在头文件中定义。您可以拥有指向未定义结构的指针。


推荐阅读