わかりにくくてすみません。
こんな感じのものを作ってみました。
Factoryクラスがオブジェクトを管理しています。
クライアントがcreateメソッドを呼び出すと、
指定したインスタンスが得られます。
ifの羅列になってしまうのですが・・・

class Factory{
private:
 std::list<Object*> m_obj_list;
public:
 Object* create(const type_info& a_type){
  Object* nobj;
  if(a_type == typeid(Integer)){
   nobj = (Object*)new Integer;
  }else if(a_type == typeid(Symbol)){
   nobj = (Object*)new Symbol;
  }else{
   throw new UExceptionNotSupportType;
  }
  m_obj_list.push_back(nobj);
  return nobj;
 }
}