C++ 如何创建C++;可以同时接受Unix和Windows标头的API?

C++ 如何创建C++;可以同时接受Unix和Windows标头的API?,c++,unix,serial-port,C++,Unix,Serial Port,我正在为串口硬件构建一个API,我希望这个API能够在Unix和Windows系统上工作。在Windows中我使用了,在Unix中我使用了,和 有没有办法让使用我的API的人决定他使用的是哪个操作系统,然后再使用API?还是应该为每个系统建立一个库 例如,我希望使用我的API的人在标题中包括unix或windows,然后这将决定他的硬件。这可能吗?通常,您会从一个标题开始,该标题定义了通用功能的用户界面。这无疑与您设计的有所不同,但大致顺序如下: 类串行端口{ 类配置{ int bps; 枚举流

我正在为串口硬件构建一个API,我希望这个API能够在Unix和Windows系统上工作。在Windows中我使用了,在Unix中我使用了,和

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


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

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

类串行端口{
类配置{
int bps;
枚举流控制{无,软件,硬件};
// ...
};
公众:
无效打开(标准:字符串常量和名称);
bool配置(配置常量和配置);
bool read(字符*缓冲区,大小\u t size);
bool写入(字符常量*缓冲区,大小);
无效关闭();
};
然后,您通常会为正在执行的每个操作系统创建一个目录,以支持包含实现该操作系统的
配置
串行端口
类的代码


然后在构建时,您将决定您的目标操作系统,并为该操作系统构建接口的实现。在某些情况下,您会或多或少明确地这样做,例如在构建时传递类似于
OS=UNIX
OS=WINDOWS
的内容。在其他情况下(特别是如果您使用诸如CMake之类的跨系统构建生成器),构建生成器本身将检测目标操作系统,并允许您在构建脚本中简单地查询该操作系统。

是的,这是可能的,但其范围太广,此处无法简单回答。需要查找的一些关键点是接口、Pimpl习惯用法、预处理器条件和更多内容。@πάνταῥεῖ 我的API是抽象的,它可以在两种环境下工作,没有任何问题,因此它是跨平台的,但是,它只是我拥有的串行端口类。我有串口类,一个用于unix,一个用于windows,但只有一个API类。如果你已经有了一些东西,最好给出一个你的设计示例,以及你具体遇到的问题。注意,这并不是什么特别的事情,许多跨平台框架都是这样工作的。可能会学习一些,例如Qt或boost。例如,有这样一个库,你认为我应该如何让程序员使用config类?我这样做了:SerialPort::Configuration配置;config.bps=23;但是我不知道如何使用枚举class@JohnSall:现在,我显示的枚举只定义类型/名称,而不是保存它们的变量,因此明确的起点是实际定义变量;config.flowControl=config.NONE;这条路对吗?@JohnSall:对,看起来差不多对。