gpt4 book ai didi

c++ - C/CPP 宏或预处理器来处理一个方法的多个版本

转载 作者:行者123 更新时间:2023-11-28 06:19:12 26 4
gpt4 key购买 nike

如何在我的 node addon 中处理多个版本的方法,当跨多个版本的节点进行编译时。例如:node 版本 0.10*uv_inet_ptonuv_inet_pton 不同于 0.12.*。这些版本中的返回类型不同。我可以通过定义宏或预处理器来处理这种情况吗?

最佳答案

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 表示成功。

至于newer versions ,返回类型已经改变:

UV_EXTERN int uv_inet_pton(int af, const char* src, void* dst);

因此,使用 newer 中提供的版本信息和 older版本,您可以推断出您正在编译哪个版本。这些链接适用于 0.101.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
}

对于其他可能的不兼容性,尝试在主代码中尽可能少地使用版本检查,并为脏工作编写包装器。这样,您的主要代码看起来会更好。

关于c++ - C/CPP 宏或预处理器来处理一个方法的多个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29606092/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com