【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&)
	{
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章