大きなプロジェクトには、コード内のどこにでも「fopen」を配置する代わりに、実際のプラットフォームタイプ(ミューテックス、ファイル、スレッドなど)から抽象化するための中央クラスと関数があります。これは良いことですが、さらに進んで、ヘッダーファイル(のような#include <windows.h>
)にシステムインクルードを含めないようにします。これは、真のプラットフォームの抽象化とより高速なコンパイルになります。欠点としては、システムタイプ(Windows HANDLEなど)にtypedefすることはできません。
オプション1:PImpl-イディオム
class RwMutex
{
// .....
private:
struct Impl;
Impl* m_Impl;
}
- Pro:Cppによく隠されている実装とプラットフォームの種類。
- 短所:失敗する可能性のある2段階の構築(「新しい」、例外はありません)が含まれます。やるのが面倒。
オプション2:名前空間関数
class RwMutex {
public:
bool LockRead() {return RwMutexLockRead( this );}
private:
char m_AnonymousMember[ 16 ];
}
bool RwMutexLockRead( RwMutex* p );
- 長所:実装はそれにリンクするだけで、それ自体をライブラリに配置するのに理想的です。
- 短所:メンバーを保持するスペースのreinterpret_castが含まれます。デバッガーでは良くありません。また、多くの作業。
たぶん私はそれに熱心に取り組んでいますが、膨大な量のプロジェクトコードがプラットフォームに依存するインクルードをクリーンアップし、-nostdinc
オプションによって強制されるとしたら、それは素晴らしいことです。