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;
}