C ++、Javaリフレクションシミュレーション、クラス名に応じて動的に作成されたクラス

#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

おすすめ

転載: www.cnblogs.com/cute/p/11201778.html