1.Loki的下载地址 http://sourceforge.net/projects/loki-lib/
2.把loki库考到自己的工程下
3.引入
详细代码:
#include <iostream>
#include <string>
#include "loki/Factory.h"
#include "loki/Singleton.h"
// 窗体基类
struct IWidget{
virtual void printName() = 0;
virtual ~IWidget(){;}
};
// 定义窗体工厂,使用string区分各对象类型
typedef Loki::Factory<IWidget, std::string> widget_factory_t;
// 按钮窗体
struct CButton : IWidget{
void printName()
{
std::cout << "CButton" << std::endl;
}
};
// 编辑框窗体
struct CEdit : IWidget{
void printName()
{
std::cout << "CEdit" << std::endl;
}
};
// 列表框窗体
struct CListBox : IWidget{
void printName()
{
std::cout << "CListBox" << std::endl;
}
};
int main()
{
// 工厂实例
widget_factory_t wf;
// 注册各种窗体的生成器,这里偷懒用了CreateUsingNew作为生成器
wf.Register("Edit", Loki::CreateUsingNew<CEdit>::Create );
wf.Register("Button", Loki::CreateUsingNew<CButton>::Create );
wf.Register("ListBox", Loki::CreateUsingNew<CListBox>::Create );
// 测试,使用工厂生成窗体
{
IWidget* pWid = wf.CreateObject("Edit");
pWid->printName();
delete pWid;
}
{
IWidget* pWid = wf.CreateObject("ListBox");
pWid->printName();
delete pWid;
}
system("PAUSE");
return 0;
}