#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的例子
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.