问题描述
我正在为串行端口硬件构建一个 API,我希望这个 API 能够在 Unix 和 Windows 系统上运行。在 Windows 中我使用了
是否可以让使用我的 API 的人决定他使用的是哪个操作系统,然后使用该 API?还是应该为每个系统构建一个库?
我希望使用我的 API 的人在头文件中包含 unix 或 windows,然后这将决定他的硬件。这可能吗?
解决方法
通常,您会从定义用户界面到通用功能的单个标头开始。这无疑与您设计的有所不同,但大致上是这样的:
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();
};
然后,您通常会为您正在执行的每个操作系统提供一个目录,以支持包含为该操作系统实现 Configuration
和 SerialPort
类的代码。
然后在构建时,您将决定您的目标操作系统,并为该操作系统构建接口的实现。在某些情况下,您或多或少会明确地执行此操作,例如在构建时传递类似 OS=UNIX
或 OS=WINDOWS
的内容。在其他情况下(特别是如果您使用像 CMake 这样的跨系统构建生成器),构建生成器本身会检测目标操作系统,并让您在构建脚本中简单地查询它。