c++ - 多平台库设计。最佳实践

标签 c++ c cross-platform

<分区>

设计具有不同平台特定实现的函数的最佳实践是什么?

例如,我在库模块(已导出)中有一个结构看起来像这样的函数:

void foo()
{
#ifdef PLATFORM_WINDOWS
  // windows-specific implementation
#elif PLATFORM_LINUX
  // linux-specific implementation
#elif PLATFORM_SOLARIS
  // solaris-specific implementation
#endif
}

每个部分都可以(并且确实)包含大量代码,这使得阅读变得困难等等。

做这样的事情的正确方法是什么?

最佳答案

如果实现完全不同,最好不要使用预处理器条件,而是为每个平台准备单独的 .c 文件。每个都包含在共享头文件中声明的相同函数的不同的、特定于平台的实现。然后构建系统会选择正确的文件。

例如在 GLFW 中,有 x11_window.cwin32_window.c ,并且都实现了相同的功能,例如 _glfwPlatformGetWindowSize()。

关于c++ - 多平台库设计。最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51873386/

相关文章:

string - 生成字符串所有可能排列的列表

下标运算符的 C++ 继承规则

c - 如何使用 statx 系统调用?

c++ - 从 unsigned char* 到 const wchar_t* 的转换

CreateWellKnownSid 说 WinAccountAdministratorSid 的参数不正确,但适用于 WinBuiltAdministratorsSid

c++ - 自动工具编译器

python - 在linux和mac中从python查询窗口id

c++ - 在C++中输出具有常数个字符的浮点值

c++ - 从 QML 访问 C++ 函数

c++ - 适用于 Linux 和 Windows 的 C 和 C++