我正在开发一个 C++ 库,其中一部分是我需要的几个操作系统函数的抽象层。我开始使用 Windows API 实现它,但计划使用 #ifdef 等添加对其他平台的支持。
然而,开始成为一个问题的是,包括 Windows.h 会传播到我不需要它的整个其余代码,特别是,因为它是一个库,它也会污染其他人的代码它。我真的不介意 Windows API 是否使用命名空间或某种清晰的方式来区分其代码,而是它们 #define 了很多非常常见的词,例如 small、near、far(小写)和很多函数名也很一般。
所以我真的很希望我的代码中只有平台特定的部分可以访问这些,并且它不会包含在其他任何地方。我知道显而易见的解决方案是仅在 CPP 文件中包含 Windows.h,但这并不总是可行的,因为某些平台特定的数据类型或结构是类成员变量,例如:
class Window {
public:
// ...
private:
HWND handle;
};
那么有没有办法做到这一点?
谢谢。