我看了看表头内部的内容,以了解类型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
我下载了整个存储库(https://github.com/nodejs/node)并搜索了napi_value__
,但它只找到了一个参考...也许是用某些V8引擎的东西编译的?
答案 0 :(得分:1)
第一个和第三个未定义napi_value
。第一个定义napi_addon_register_func
。第三个定义napi_callback
。
此行:
typedef struct napi_value__ *napi_value;
将napi_value
定义为指向struct napi_value__
的指针。
“不透明”(通常)表示该结构是在库中定义的,而不是在头文件中定义的。您可以具有未定义结构的指针。
答案 1 :(得分:1)
此
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);
对于此typedef同样有效
typedef napi_value (*napi_callback)(napi_env env,
napi_callback_info info);
也就是说,它还为返回类型为napi_callback
的函数指针和两个类型为napi_value
和napi_env
的参数声明别名napi_callback_info
。
对于这种typedef
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;
答案 2 :(得分:1)
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_value
的{{1}}和napi_env
类型参数的函数指针。