《C模板元编程技术与应用.pptVIP

  • 3
  • 0
  • 约 52页
  • 2016-12-28 发布于北京
  • 举报
C++模板元编程技术与应用 荣耀 royal@ 动机 目录 历史 导入范例 导入范例 导入范例 主要思想 静态语言设施 静态语言设施 静态语言设施 控制结构 控制结构 控制结构 控制结构 控制结构 控制结构 数据结构 数据结构 数据结构 数据结构 数据结构 数值计算 数值计算 数值计算 数值计算 类型计算 类型计算 代码生成 代码生成 代码生成 代码生成 代码生成 代码生成 断言和契约 断言和契约 断言和契约 断言和契约 断言和契约 库 库 库 DSEL DSEL DSEL 结语 结语 资源 资源 资源 资源 The End // 自定义类型Test struct Test { enum {Value = 100}; }; template typename T struct Holder { T Value; static void f() { cout sizeof(T) endl; } // ... }; // 定义一个包含有char、int、Test和float的Typelist typedef TypeListchar, TypeListint, TypeListTest, TypeListfloat, Nil CIRF; typedef GenScatterHierarchyCIRF, Holder SH; 这个Holder模板决定了生成的各个类的能力 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd. int main() { SH sh; cout (dynamic_castHolderchar(sh).Value = a) endl; cout (dynamic_castHolderint(sh).Value = 1) endl; cout (dynamic_castHolderfloat(sh).Value = 3.14f) endl; cout (dynamic_castHolderTest(sh).Value.Value) endl; // cout (dynamic_castHolderdouble(sh).Value = 3.14) endl; } GenScatterHierarchy将给定的TypeList中的每一个类型施加于一个由用户提供的基本模板Holder上,从而产生一个类层次结构。换句话说,生成的各类的能力,取决于客户提供的Holder模板的能力。 示例中生成了一个多重继承类层次结构,Holderchar, Holderint, Holderfloat, HolderTest之间没有任何关系,但它们都是SH的基类,即所产生的SH层次结构其实相当于: class SH: public Holderchar, public Holderint, public HolderTest, public Holderfloat; Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd. 利用元编程生成类层次结构最大的好处在于其灵活性:TypeList是可扩展的,其长度不但可以任意定制,而且对其更改后SH可以自适应地产生新的代码。Loki库中的Abstract Factory泛型模式即借助于这种机制实现在不损失类型安全性的前提下降低对类型的静态依赖性。 进一步了解typelist和相关的代码生成技术,以及Abstract Factory泛型模式,参见[注11]和[注15]。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd. 可以利用元编程技术实现编译期断言和编译期约束 。 断言用于指定程序中某些特定点的条件应为“真”。如果该条件不为真,则断言失败,程序执行中断。大量使用断言可以在开发期捕捉许多错误。当然,若有可能,在编译期抓住错误更好。触发编译期断言的结果是导致程序无法通过编译。 编译期断言的实现方式并非仅限于模板元编程一种。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client

文档评论(0)

1亿VIP精品文档

相关文档