2011年3月17日

型别选择

摘要: 型别到型别的转换目的是为了在编译期决定调用哪一部分的代码,型别选择则是以在编译期决定使用何种型别为目的。 Select.h //在泛化版本中,以Then型别作为nested typetemplate<bool If, class Then, class Else>struct Select{ typedef Then Result;};//在特化版本中(false),以Else型别作为nested... 阅读全文

posted @ 2011-03-17 19:21 Observer 阅读(169) 评论(0) 推荐(0) 编辑

型别到型别的映射

摘要: 变量,常数,类型在编译器看来可以分为两类,后两者是同一类的,原因是前者无法在编译期得知其确切的值。 对于判断语句,作用是在运行期选择不同的分支来运行。 那么在编译期选择不同的分支来运行用什么语句来做到呢?运行嘛,最终也要落在函数身上,不管是面向过程,还是面向对象都是如此,于是问题就划归成为在编译期选择不同的函数来运行。 使用常数来选择不同的函数,我想通过函数指针数组来实现是一种方法,但实在是不美观... 阅读全文

posted @ 2011-03-17 15:14 Observer 阅读(283) 评论(0) 推荐(0) 编辑

2011年3月16日

编译期断言

摘要: 书中列出三种编译期断言的实现方式,一一列出:CompileTimeAssertion.h //第一个版本使用不能建立空数组的性质#define STATIC_CHECK1(expr) \{\ char unnamed[(expr) ? 1 : 0];\}//第二个版本使用模板的非类形参,使用为定义类是违法的template<bool> struct CompileTimeError;//声明一个模板template<> struct CompileTimeError<true>{};//仅仅对模板参数为true的特化实现#define STATIC_CHEC 阅读全文

posted @ 2011-03-16 23:30 Observer 阅读(668) 评论(0) 推荐(0) 编辑

template template

摘要: #include<list>#include<vector>#include<iostream>using namespace std;/*如果有一个需求是在自定义类中使用某种类型(T)元素,固定容器(vecter)*/template<class T>class ClassA{public: vector<T> vecT;};//如果需求变成在自定义类中使用固定类型(int)元素,不同容器呢?template<class SpecificContainer>class ClassB{public: SpecificCon 阅读全文

posted @ 2011-03-16 22:48 Observer 阅读(342) 评论(0) 推荐(0) 编辑

导航