#ifndefのCLASSFACTORY_H
#define CLASSFACTORY_H
書式#include <マップ>
書式#include <文字列>
名前空間stdを使用。
#include "boardbase.h"
typedef void *型(* register_func)();
クラスClass
{
パブリック:
静的ボイドが*のnewInstance(のconst文字列&CLASS_NAME){
マップ<文字列、register_func> ::イテレータそれはm_register.find(CLASS_NAME)を=。
もし(それ== m_register.end())
NULLを返します。
他
)(第2> IT-を返します。
}
静的ボイドregisterClass(CONST文字列&CLASS_NAME、register_funcのFUNC){
m_register [CLASS_NAME] =のFUNC。
}
プライベート:
/ * * /キーは、クラス名で、値はクラスのインスタンスを作成するための機能です
スタティックマップの<string、register_func> m_register。
}。
クラスのClassFactory
{
パブリック:
静的BoardBase * createBoardBase(CONST文字列&BANK_NAME){
リターン(BoardBase *)クラス::のnewInstance(BANK_NAME)。
}
プライベート:
ClassFactory();
}。
クラスの登録
{
パブリック:
登録(定数文字列&CLASS_NAME、register_funcのFUNC){
クラス:: registerClass(CLASS_NAME、FUNC)。
}
}。
// CPPファイルを使用します
#define REGISTER_CLASS(CLASS_NAME)\
クラスCLASS_NAME ##登録{\
公共:\
静的void *型のnewInstance(){\
新しいCLASS_NAMEを返します。\
} \
プライベート:\
静的定数レジスタreg; \
}; \
constの登録は、登録:: REG(#1 CLASS_NAME、CLASS_NAME ##登録::のnewInstance)を## CLASS_NAME。
#endifの// CLASSFACTORY_H