![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
template
文章平均质量分 65
shenya1314
这个作者很懒,什么都没留下…
展开
-
Type Traits
编译期根据型别作判断的泛型技术template class TypeTraits{private :template struct PointerTraits{enum{result = false};typedef NullType PointeeType;}template struct PointerTraits{enum {resul原创 2017-01-02 21:41:02 · 358 阅读 · 0 评论 -
泛化Abstract Factory
class AstractEnemyFactory{public:virtual Soldier* MakeSoldier() =0;virtual Monster* MakeMonster()=0;virtual SuperMonster* MakeSuperMonster()=0;}class EasyLevelEnemyFactory: public Abstra原创 2017-01-21 16:09:51 · 288 阅读 · 0 评论 -
实现“带寿命的Singletons”
鸡生蛋、蛋生鸡问题不必纠结,只需要仔细操控PTrackerArray,看代码namespace Private{class LifetimeTracker{public:LifetimeTracker(unsigned int x):longervity__(x){}vitual ~LifetimeTracker()=0;friend inline bool Compa原创 2017-01-15 23:21:37 · 521 阅读 · 0 评论 -
泛化Factory
class Shape{ public : virtual void Draw()const=0; virtual void Rotate(double angle) =0; virtual void Zoom(double zoomFactor)=0;}class Drawing{ public: void Save(std::ofstream OutFi原创 2017-01-21 15:36:11 · 483 阅读 · 0 评论 -
泛型仿函数二
转发接口解决两个问题:参数类型与个数问题泛型自动生成需要的那个template class Functor{typedef TList ParmList;typedef typename TypeAtNonStrict::Result Parm1;typedef typename TypeAtNonStrict::Result Parm2;.....public原创 2017-01-10 21:30:17 · 436 阅读 · 0 评论 -
Singletons
构造函数是private,客户端无法产生Singletons,但Instance()使得其编译期就得以实施class Singleton{public :static Singleton * Instance(){if(!pInstance_)pInstance_=new Singleton;return pInstance_;}}private:Singl原创 2017-01-12 17:47:25 · 629 阅读 · 0 评论 -
泛型仿函数三
成员函数指针有些C++编译器厂商定义出一种新型别,让你可以通过以下语法保存operator.*操作结果void (__closure::* geronimosWork)()=geronimo.*pActivity;geronimosWork();templateclass MemFunHandler:public FunctorImpl{public:typ原创 2017-01-15 18:26:03 · 484 阅读 · 0 评论 -
小型对象分配技术
内存薄记机构struct MemControlBlock{ std::size_t size_; bool available_;}内存池起始处只有一个MemControlBlock,并将所有内存视为一块,这是所谓root控制块策略:最先匹配法则,最佳匹配法则,最差匹配法则,随机匹配法则struct Chunk{ void Init(std::siz原创 2017-01-05 18:02:02 · 381 阅读 · 0 评论 -
泛型仿函数一
泛型仿函数函数和泛仿函数之间的本质区别在于后者可以存储状态,并可以调用成员函数特点1.可封装任何处理请求 2.具备型别安全性 3.是一种带有"value语义"的对象Command设计模式Command将请求封装与对象之内,“和实际执行者分开存储的工作” 从而降低系统中两个部分之间的依存性1、应用程序产生一个concreteCommand对象2、concreteCom原创 2017-01-09 21:30:40 · 368 阅读 · 0 评论 -
自动生成代码
loki 提供一个极具威力的工具,可轻易将typelist里的每一个型别套用于一个由用户提供的基本template身上这么一来将typelist 内的型别分发至客端代码的一些不便过程就被完全封装在loki程序库中,使用者只需自行定义一个单一templatetemplate class Unit>class GenScatterHierarchy;template class Uni原创 2017-01-04 23:17:03 · 387 阅读 · 0 评论 -
多重继承和 templates
两者互补。多重继承欠缺技术( mechanics), templates 有丰富的技术。多重继承缺乏型别信息,而那东西在templates 里头大量存在。 Templates 的特化无法扩张( scales), 多重继承却很容易扩张。你只能为 template成员函式写㆒份预设版ᴀ,但你可以写数量无限的base classes。根据以㆖分析 ,原创 2016-12-25 12:35:02 · 447 阅读 · 0 评论 -
泛型基础特性分析
一、class template 有㆒个成员函式曾被用到,它不会被编译器具体实现出来。编译器不理会它,甚至也许不会为它进行语法检验成员函式曾被用到,它不会被编译器具体实现出来。编译器不理会它,甚至也许不会为它进行语法检验5。如此㆒来造成 host class有机会指明并使用 policy class的可选特性。举个例子,让我们为WidgetManager 定原创 2016-12-26 19:14:31 · 437 阅读 · 0 评论 -
浅析C++ Compile-time Assertion技术
你可能经常需要利用运行时断言技术,它可以方便地测试前提条件。但是,随着Metaprogramming概念的出现,编译时断言技术也已经和runtime assertion一样的普遍了。如何在编译时进行断言呢?其实,方法只有一个,就是让编译器生成一条错误信息,但是编译器生成的错误信息信息性往往有又理想。并且,即使你在一种编译上设计了一种方案,你也很难把它移植到其他的编译器上。我们通过其实现方法的改进和转载 2016-12-27 15:13:00 · 1080 阅读 · 0 评论 -
模板特化与本地类
Partial Template Specialization让你在template 的所有可能实体中特化出一组子集 template class Widget{}exampletemplate class Widget{}其中ModalDialog和MyController是你另外定义的classthis Partial Template Specia原创 2016-12-31 18:14:31 · 270 阅读 · 0 评论 -
template两个问题
if else问题templateclass NiftyContainer{ private: void DoSomething(T* Obj,Int2Type) { T *pNewObj = pObj->Clone(); } void DoSomething(T *Obj,Int2Type) { T *pNew = new T(*pObj);原创 2017-01-01 14:09:34 · 623 阅读 · 0 评论 -
sizeof 感知重载,模板具现, 转换规则
问题:如何侦知任意型别 T 是否可以自动转换为型别 U? 方案:侦测转换能力的想法:合并运用 sizeof 和重载函数。 1 依赖 sizeof,sizeof 有着惊人的能力,你可以把 sizeof 用在任何表达式身上,不论后者有多复杂。sizeof 会直接传回大小,不需拖到执行期才评估。这意味着 sizeof 可以感知重载 (overloading)、模板具现(template转载 2017-01-02 09:12:22 · 741 阅读 · 0 评论 -
Visitor泛化
class DocElementVisitor{ public : virtural void VisitParagraph(Paragraph&)=0; vitrural void VisitRasterBitmap(RasterBitmap&) =0;}class DocElement { public : vitual void Accept(DocEle原创 2017-01-21 18:19:29 · 288 阅读 · 0 评论