C/CPP 宏或预处理器,用于处理方法的多个版本
C/CPP Macro or a pre processor to handle multiple versions of a method
在跨多个版本的节点进行编译时,如何处理我node
addon
中方法的多个版本。例如:node
版本的uv_inet_pton
和uv_inet_pton
0.10*
与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 表示成功。
对于较新的版本,返回类型已更改:
UV_EXTERN int uv_inet_pton(int af, const char* src, void* dst);
因此,使用较新版本和旧版本中提供的版本信息,可以推断出要针对哪个版本进行编译。这些链接适用于0.10
和1.0x
,但您也可以在0.12
中获得类似的信息。
表示成功、其他值表示失败的函数没问题,则需要使用下面提供的函数:
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++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 处理编译器关于可能丢失数据的警告的最优雅方法是什么
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 处理从列表中删除指向对象的指针的"healthy"方法是什么?
- 哪种方法更适合处理虚拟析构函数?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- Tesseract/Lebonica处理单页和多页图像的正确方法
- 在 if 语句中处理多个 or 的更优雅的方法是什么
- Java(或C++)如何处理接口中定义的方法的调用
- 以C++读取文件并处理可能的错误的便携式方法
- 是否有可以处理方法调用依赖关系的设计模式?
- 如何将信号处理程序添加为方法
- 在2018年使用C++处理Unicode的正确方法是什么?