cocos2d-x3.0 advice reflection demo

#include "stdafx.h"
#include 
#include 
using namespace std;

class BaseDraw {
public:
  virtual void Draw() = 0;
};

class Factory {
public:
  typedef BaseDraw *(*CreateFun)();
  ~Factory() {}
  static Factory* getInstance() {
    if (this_ == NULL) {
      this_ = new Factory;
    }
    return this_;
  }
  bool Register(string name,CreateFun p) {
    map_date_[name] = p;
    return true;
  }
  BaseDraw* CreateClass(string name) {
    return map_date_[name]();
  }
private:
  map map_date_;
  static Factory* this_;
};
Factory* Factory::this_ = NULL;


class XX1Draw :public BaseDraw {
public:
  static XX1Draw* Create() {
    return new XX1Draw;
  }
  virtual void Draw() {

  }
};
class XX2Draw :public BaseDraw {
public:
  static XX2Draw* Create() {
    return new XX2Draw;
  }
  virtual void Draw() {

  }
};


static bool b1 = Factory::getInstance()->Register("XX1Draw",(BaseDraw *(*)())XX1Draw::Create);
static bool b2 = Factory::getInstance()->Register("XX2Draw",(BaseDraw *(*)())XX2Draw::Create);

int _tmain(int argc, _TCHAR* argv[])
{
  Factory::getInstance()->CreateClass("XX2Draw")->Draw();
  Factory::getInstance()->CreateClass("XX1Draw")->Draw();
    return 0;
}