c++ - 理解 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 引擎的东西编译的?
解决方案
第一个和第三个没有定义napi_value
。第一个定义napi_addon_register_func
. 第三个定义napi_callback
。
这一行:
typedef struct napi_value__ *napi_value;
定义napi_value
为指向 a 的指针struct napi_value__
。
“不透明”意味着(通常)该结构在库中定义,但未在头文件中定义。您可以拥有指向未定义结构的指针。
推荐阅读
- react-native - React native - eslintrc - prettierrc:如何防止移除 JSX 中一个元素周围的括号
- c# - Caliburn.Micro 检测带有修饰符的文本框输入
- java - 如何在具有不同键的外部 hashMap 中传递具有相同键的内部 hashMap?
- julia - 如何向现有字典添加新的键值对?
- java - 可在室内流动
- html - CSS中两个div容器的交替换行符
- android - 如何在菜单顶部显示工具栏的标题
- android - Kotlin:如何使用 RecycleView + ViewAdapter 让不同的用户得到不同的 ViewHolders?
- python - Python“全部”执行
- cordova - cordova-plugin-qrscanner 相机未显示