其整體結構不怎么面向對象

以一份全局指針的方式訪問某個系統模塊或管理器,一切沿襲自C版本的idTech設計,如下

// FileSystem.h

class idFileSystem {
public:
      virtual void   Init( void ) = 0;
      virtual void   Shutdown( void ) = 0;

      // methed...
      virtual void   ListFiles( ... ) = 0;

};

extern idFileSystem*   fileSystem;

// FileSystem.cpp
#include "FileSystem"

class idFileSystemLocal: public idFileSystem {
public:
      void   Init( void );
      void   Shutdown( void );

      // methed...
      void   ListFiles( ... );

};

idFileSystemLocal   fileSystemInstance;
idFileSystem*   fileSystem = &fileSystemInstance;

void   idFileSystemLocal::Init( void ) {
}

void   idFileSystemLocal::Shutdown( void ) {
}

// methed...
void   idFileSystemLocal::ListFiles( ... ) {
}

然后其使用端代碼如下:
fileSysem->Init();

fileSystem->ListFile( files, .... );

fileSystem->Shutdown();

這種手法大量運用,很好的達到了子系統間的解耦!!
里面的idCommon, idCmdSystem, idRenderSystem, idSoundSystem, idCVarSystem, idGame等,都是這一套

簡單而有效的tip,這樣以后的某個模塊要做成動態庫版本,只需通過獲得這個接口指針就可