工厂模式,根据ID创建对应的实例类
//
// main.cpp
// TestCPP1
//
// Created by bianchx on 15/4/27.
// Copyright (c) 2015年 bianchx. All rights reserved.
//
#include <iostream>
#include <map>
class BaseClass
{
public:
virtual void print()
{
std::cout << __FUNCTION__ << std::endl;
}
};
typedef BaseClass *(*CreateBase)();
static std::map<long, CreateBase> _map;
class Factory
{
public:
static BaseClass *createInstanse(long id)
{
return _map.find(id)->second();
}
};
template <typename T>
struct ClassRegister:BaseClass {
ClassRegister(long _id)
{
_map[_id] = &(ClassRegister::createT);
}
static BaseClass* createT()
{
return new T();
}
};
class ClassA:public BaseClass
{
public:
static ClassRegister<ClassA> reg;
virtual void print()
{
std::cout << "ClassA" << std::endl;
}
};
ClassRegister<ClassA> ClassA::reg(1);
class ClassB:public BaseClass
{
private:
static ClassRegister<ClassB> reg;
public:
virtual void print()
{
std::cout << "ClassB" << std::endl;
}
};
ClassRegister<ClassB> ClassB::reg(2);
int main(int argc, const char * argv[]) {
Factory::createInstanse(1)->print();
Factory::createInstanse(2)->print();
return 0;
}