在这里插入代码片
#ifndef MANYTYPE_H
#define MANYTYPE_H
#include <iostream>
#include <memory>
using std::cout;
using std::endl;
class Man
{
public:
void speak(){cout << "Man" << endl;}
};
class Woman
{
public:
void speak(){cout << "Woman" << endl;}
};
class Teacher
{
public:
void speak(){cout << "Teacher" << endl;}
};
class BaseType{
public:
virtual void speak() = 0;
};
template <class Type>
class TypeSon : public BaseType{
public:
Type _t;
void speak() override{
_t.speak();
}
};
class Factory{
public:
Factory(){};
virtual BaseType* create() = 0;
};
template<class T>
class MakeFactory : public Factory{
public:
BaseType* create() override{
return new TypeSon<T>();
}
};
template<class T>
Factory* makeFactory(){
return new MakeFactory<T>();
}
#endif
Factory* a = makeFactory<Man>();
a->create()->speak();
std::map<int, Factory*> temp = {
{1, makeFactory<Man>()},
{2, makeFactory<Woman>()},
{3, makeFactory<Teacher>()},
};
temp[1] = a;
cout << "record : " << endl;
temp[1]->create()->speak();
temp[2]->create()->speak();
temp[3]->create()->speak();