根据字符串创建类

#pragma warning (disable:4786)



#include <iostream>

#include <map>

#include <string>



class Shape;



typedef Shape *(*FactoryFunction)();



class ShapeFactory

{

public:

static void Register(std::string name, FactoryFunction instanceFunction)

{m_FactoryFunctions[name] = instanceFunction;};

static Shape * getInstance(std::string name)

{ if (m_FactoryFunctions.count(name)) return m_FactoryFunctions[name]();

else return NULL; }

private:

static std::map<std::string,FactoryFunction> m_FactoryFunctions;

};



std::map<std::string,FactoryFunction> ShapeFactory::m_FactoryFunctions;



class Shape

{

public:

virtual void Draw() = 0;

};



class Circle : public Shape

{

public:

void Draw() { std::cout << "Drawing a Circle......Done" << std::endl; }

static Shape *createInstance() {return new Circle;}

};



class Triangle : public Shape

{

public:

void Draw() { std::cout << "Drawing a Triagnle......Done" << std::endl; }

static Shape *createInstance() {return new Triangle;}

};



int main()

{

ShapeFactory::Register("circle", & Circle::createInstance);

ShapeFactory::Register("Triangle", & Triangle::createInstance);



Shape * pShape = NULL;



pShape = ShapeFactory::getInstance("circle");

if (NULL == pShape)

{

std::cout << "can't find the product in the factory" << std::endl;

delete pShape;

}

else

{

pShape->Draw();

delete pShape;

}

return 0;

}

 

 

http://bbs.chinaunix.net/archiver/?tid-1263058.html

 

 

http://blog.csdn.net/xoyojank/archive/2008/07/03/2608400.aspx

你可能感兴趣的:(根据字符串创建类)