如何创建可以接受 Unix 和 Windows headers 的 C++ API?

How to create C++ API that can accept both Unix and Windows headers?

我正在构建一个用于串行端口硬件的 API,我希望这个 API 可以在 Unix 和 Windows 系统上工作。在 Windows 中我使用了 并且在 Unix 中我使用了 ,

有没有办法让用我的API的人决定他用的是哪个OS,然后再用API?还是应该为每个系统构建一个库?

我希望使用我的 API 的人在 headers 中包含 unix 或 windows,然后这将决定他的硬件。这可能吗?

通常,您会从单个 header 开始,它定义用户的通用功能界面。这无疑与您设计的有所不同,但大致顺序如下:

class SerialPort { 
    class Configuration {
         int bps;
         enum FlowControl { NONE, SOFTWARE, HARDWARE };
         // ...
    };

public:
    void open(std:string const &name);
    bool configure(Configuration const &config);
    bool read(char *buffer, size_t size);
    bool write(char const *buffer, size_t size);
    void close();
};

然后您通常会为每个 OS 做一个目录来支持包含实现 ConfigurationSerialPort 类 的代码 OS.

然后在构建时,您将决定 OS 您的目标,并为该 OS 构建接口的实现。在某些情况下,您或多或少会明确地这样做,例如在构建时传递 OS=UNIXOS=WINDOWS 之类的内容。在其他情况下(特别是如果你使用像 CMake 这样的 cross-system 构建生成器)构建生成器本身会检测到目标 OS,并让你简单地在你的构建脚本中查询它。