我们在我们的大项目中有中心类和函数来从实际的平台类型中抽象出来,例如互斥体、文件、线程等,而不是在代码中到处都有“fopen”。虽然这很好,但我想更进一步,头文件中不包含任何系统(如#include <windows.h>
),这将是真正的平台抽象和更快的编译。不利的一面是,您不能只将类型定义为系统类型(例如 Windows HANDLE)。
选项1:PImpl-idiom
class RwMutex
{
// .....
private:
struct Impl;
Impl* m_Impl;
}
- 优点:实现和平台类型很好地隐藏在 Cpp 中。
- 缺点:涉及可能失败的两阶段建设(“新”,我们没有例外)。做事费劲。
选项 2:命名空间函数
class RwMutex {
public:
bool LockRead() {return RwMutexLockRead( this );}
private:
char m_AnonymousMember[ 16 ];
}
bool RwMutexLockRead( RwMutex* p );
- 优点:实现可以只链接到它,非常适合将其单独放入库中。
- 缺点:涉及包含成员的空间的 reinterpret_cast。在调试器中不好。还有很多工作。
也许我很渴望它,但如果大量项目代码将清除任何依赖于平台的包含,那将是很酷的,可能由-nostdinc
选项强制执行。