#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的例子
最新推荐文章于 2021-06-29 16:11:45 发布