如何创建可以接受 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 做一个目录来支持包含实现 Configuration
和 SerialPort
类 的代码 OS.
然后在构建时,您将决定 OS 您的目标,并为该 OS 构建接口的实现。在某些情况下,您或多或少会明确地这样做,例如在构建时传递 OS=UNIX
或 OS=WINDOWS
之类的内容。在其他情况下(特别是如果你使用像 CMake 这样的 cross-system 构建生成器)构建生成器本身会检测到目标 OS,并让你简单地在你的构建脚本中查询它。
我正在构建一个用于串行端口硬件的 API,我希望这个 API 可以在 Unix 和 Windows 系统上工作。在 Windows 中我使用了
有没有办法让用我的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 做一个目录来支持包含实现 Configuration
和 SerialPort
类 的代码 OS.
然后在构建时,您将决定 OS 您的目标,并为该 OS 构建接口的实现。在某些情况下,您或多或少会明确地这样做,例如在构建时传递 OS=UNIX
或 OS=WINDOWS
之类的内容。在其他情况下(特别是如果你使用像 CMake 这样的 cross-system 构建生成器)构建生成器本身会检测到目标 OS,并让你简单地在你的构建脚本中查询它。