【Poco】Poco::DynamicFactory的例子

#include "../tmain.hpp"

namespace DF
{
	class Base
	{
	public:
		Base()
		{
		}

		virtual ~Base()
		{
		}
	};

	class A: public Base
	{
	public:
		void print(){std::cout << "My name is A Class!" << std::endl;}
	};

	class B: public Base
	{
	};
}

void test_DynamicFactory()
{
	// 创建一个工厂实例.
	Poco::DynamicFactory<DF::Base> dynFactory;
	// 类A注册到工厂, 注册名为A, 当然也可以为其他的名字.
	dynFactory.registerClass<DF::A>("A");
	dynFactory.registerClass<DF::B>("B");
	assert (dynFactory.isClass("A"));
	assert (dynFactory.isClass("B"));

	// 通过工厂, 创建类A的对象.
	DF::A* a = dynamic_cast<DF::A*>(dynFactory.createInstance("A"));
	std::auto_ptr<DF::A> ap(dynamic_cast<DF::A*>(dynFactory.createInstance("A")));

	a->print();
	ap->print();

	try
	{
		// 已经注册过了, 将抛出异常.
		dynFactory.registerClass<DF::A>("A");
	}
	catch (...)
	{
	}

	try
	{
		// 反注册类B的
		dynFactory.unregisterClass("B");
		// 未注册的类, 注册时将抛出异常.
		std::auto_ptr<B> b(dynamic_cast<B*>(dynFactory.createInstance("B")));
	}
	catch (Poco::NotFoundException&)
	{
	}
}


你可能感兴趣的:(【Poco】Poco::DynamicFactory的例子)