首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Node.js的napi_value类型的定义

理解Node.js的napi_value类型的定义
EN

Stack Overflow用户
提问于 2019-10-21 16:05:44
回答 3查看 900关注 0票数 1

我查看了标题中的内容,看看napi_value类型是如何实现的,我完全不明白。(我的C& C++知识有限)你能帮我理解一下发生了什么吗?

代码语言:javascript
复制
>> 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);

我很困惑..。在我看来,第一种和第三种类型类似于函数签名,只不过名称是一个指针,也就是说,我对函数签名的想法是:

代码语言:javascript
复制
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

我下载并搜索了整个回购(https://github.com/nodejs/node)中的napi_value__,但它只找到了这个引用.也许它是用一些V8引擎来编译的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-21 16:06:38

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

这一行:

代码语言:javascript
复制
typedef struct napi_value__ *napi_value;

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

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

票数 1
EN

Stack Overflow用户

发布于 2019-10-21 16:09:02

代码语言:javascript
复制
typedef napi_value (*napi_addon_register_func)(napi_env env,
                                           napi_value exports);

是函数指针类型的别名napi_addon_register_func的声明,该函数的返回类型为napi_value,以及napi_envnapi_value类型的两个参数。

为了使这个声明更简单,您可以用C++ (而不是C)重写它作为别名声明

代码语言:javascript
复制
using napi_addon_register_func = napi_value ( * )(napi_env env, napi_value exports);

对于此类型胡枝子f也是有效的。

代码语言:javascript
复制
typedef napi_value (*napi_callback)(napi_env env,
                                napi_callback_info info);

也就是说,它还声明了指针类型的别名napi_callback,以便使用返回类型napi_valuenapi_envnapi_callback_info类型的两个参数进行函数。

至于这类胡枝子f

代码语言:javascript
复制
typedef struct napi_value__ *napi_value;

然后为指向类型napi_value的结构的类型指针声明别名struct napi_value__

这些声明

代码语言:javascript
复制
typedef void function_SIG(void *a,void *b);
function_SIG *functionA_ptr; 
function_SIG *functionB_ptr;

如果您想为函数的类型指针引入别名,应该重写如下

代码语言:javascript
复制
typedef void function_SIG(void *a,void *b);
typedef function_SIG *functionA_ptr; 
票数 1
EN

Stack Overflow用户

发布于 2019-10-21 16:23:28

代码语言:javascript
复制
typedef struct napi_value__ *napi_value;

napi_value定义为struct napi_value__*的类型别名。*的位置是有效的,但使IMO感到困惑,因为它是类型的一部分,而不是类型名称。比如:

代码语言:javascript
复制
typedef struct napi_value__* napi_value;

定义

代码语言:javascript
复制
typedef napi_value (*napi_callback)(napi_env env, napi_callback_info info);

定义一个类型napi_callback,它是一个指向函数的指针,它分别返回napi_value和接受napi_envnapi_callback_info类型的参数。例如,给定一个函数:

代码语言:javascript
复制
napi_value someFunction( napi_env env, napi_callback_info info ) ;

您可以创建一个指针:

代码语言:javascript
复制
napi_callback mycallback = someFunction ;

然后,可以通过以下方式调用回调:

代码语言:javascript
复制
mycallback( env, info ) ;

它是库链接到在构建库时不知道的用户提供的代码的一种方法(除其他外)。

代码语言:javascript
复制
typedef napi_value (*napi_addon_register_func)(napi_env env, napi_value exports);

是定义类型napi_addon_register_func的另一种函数指针类型--返回带有napi_envnapi_valuenapi_value类型参数的指针到函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58490130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档