我查看了标题中的内容,看看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 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引擎来编译的?
发布于 2019-10-21 16:06:38
第一个和第三个没有定义napi_value。第一个定义了napi_addon_register_func。第三个定义了napi_callback。
这一行:
typedef struct napi_value__ *napi_value;将napi_value定义为指向struct napi_value__的指针。
“不透明”意味着(通常)结构在库中定义,而不是在头文件中定义。您可以有指向未定义的结构的指针。
发布于 2019-10-21 16:09:02
这
typedef napi_value (*napi_addon_register_func)(napi_env env,
napi_value exports);是函数指针类型的别名napi_addon_register_func的声明,该函数的返回类型为napi_value,以及napi_env和napi_value类型的两个参数。
为了使这个声明更简单,您可以用C++ (而不是C)重写它作为别名声明
using napi_addon_register_func = napi_value ( * )(napi_env env, napi_value exports);对于此类型胡枝子f也是有效的。
typedef napi_value (*napi_callback)(napi_env env,
napi_callback_info info);也就是说,它还声明了指针类型的别名napi_callback,以便使用返回类型napi_value和napi_env和napi_callback_info类型的两个参数进行函数。
至于这类胡枝子f
typedef struct napi_value__ *napi_value;然后为指向类型napi_value的结构的类型指针声明别名struct napi_value__。
这些声明
typedef void function_SIG(void *a,void *b);
function_SIG *functionA_ptr;
function_SIG *functionB_ptr;如果您想为函数的类型指针引入别名,应该重写如下
typedef void function_SIG(void *a,void *b);
typedef function_SIG *functionA_ptr; 发布于 2019-10-21 16:23:28
typedef struct napi_value__ *napi_value;将napi_value定义为struct napi_value__*的类型别名。*的位置是有效的,但使IMO感到困惑,因为它是类型的一部分,而不是类型名称。比如:
typedef struct napi_value__* napi_value;定义
typedef napi_value (*napi_callback)(napi_env env, napi_callback_info info);定义一个类型napi_callback,它是一个指向函数的指针,它分别返回napi_value和接受napi_env和napi_callback_info类型的参数。例如,给定一个函数:
napi_value someFunction( napi_env env, napi_callback_info info ) ;您可以创建一个指针:
napi_callback mycallback = someFunction ;然后,可以通过以下方式调用回调:
mycallback( env, info ) ;它是库链接到在构建库时不知道的用户提供的代码的一种方法(除其他外)。
typedef napi_value (*napi_addon_register_func)(napi_env env, napi_value exports);是定义类型napi_addon_register_func的另一种函数指针类型--返回带有napi_env的napi_value和napi_value类型参数的指针到函数。
https://stackoverflow.com/questions/58490130
复制相似问题