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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值