概述
template policy模式实现
#include <cstdlib>
#include <iostream>
using std::cout;
using std::endl;
template <class T>
struct OpNewCreator
{
static T *Create()
{
return new T;
}
};
template <class T>
struct MallocCreator
{
static T *Create()
{
void *buf = std::malloc(sizeof(T));
if (!buf) return 0;
return new(buf) T;
}
};
template <class T>
struct PrototypeCreator
{
PrototypeCreator(T *pObj = 0)
: pPrototype_(pObj)
{ }
T *Create()
{
return pPrototype_ ? pPrototype_->Clone() : 0;
}
T *GetPrototype()
{
return pPrototype_;
}
void SetPrototype(T *pObj)
{
pPrototype_ = pObj;
}
private:
T *pPrototype_;
};
class Widget
{
};
class Gadget
{
};
// template <class CreationPolicy>
// class WidgetMannager : public CreationPolicy { };
template <template <class Created> class CreationPolicy>
class WidgetMannager : public CreationPolicy<Widget>
{
public:
void Print() { cout << "Widtget Manager" << endl; }
void DoSomething()
{
Gadget *pObj = CreationPolicy<Gadget>().Create();
}
};
int main()
{
typedef WidgetMannager<OpNewCreator> MyWidgetMgr;
MyWidgetMgr mgr;
mgr.Print();
return 0;
}
最后
以上就是高兴马里奥为你收集整理的c++ template 笔记(1) - Policy(一)的全部内容,希望文章能够帮你解决c++ template 笔记(1) - Policy(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复