node
addon
在跨多个版本的节点编译时如何处理我的方法的多个版本。例如:uv_inet_pton
and uv_inet_pton
of node
version0.10*
不同于0.12.*
. 这些版本的返回类型不同。我可以通过定义宏或预处理器来处理这种情况吗?
问问题
258 次
1 回答
1
0.10中的签名是:
typedef struct uv_err_s uv_err_t;
uv_err_t uv_inet_pton(int af, const char* src, void* dst);
struct uv_err_s {
/* read-only */
/* MY ADDITION:
uv_err_code is an enum here, and 0 means OK.
*/
uv_err_code code;
/* private */
int sys_errno_;
};
所以调用这个函数会返回一个结构体,它有一个code
字段,指定错误,0 表示成功。
至于较新的版本,返回类型已更改:
UV_EXTERN int uv_inet_pton(int af, const char* src, void* dst);
因此,使用新旧版本中提供的版本信息,您可以推断出您正在编译的版本。链接用于0.10
和1.0x
,但您也可以从中获取类似信息0.12
。
如果函数返回 int 正常,0 表示成功,其他值表示失败,则需要使用下面提供的函数:
int my_inet_pton(int af, const char* src, void* dst)
{
#ifdef VERSION_0_10_CHECK
/* I'm a little rusty on enums, you might need to
* cast to int, i'm not sure */
return uv_inet_pton(af, src, dst).code;
#else
return uv_inet_pton(af, src, dst);
#endif
}
对于其他可能的不兼容性,请尝试在主代码中尽可能少地使用版本检查,并为脏工作编写包装器。这样,您的主要代码会看起来更好。
于 2015-04-13T16:28:24.600 回答