随笔分类 -  template of C++

Typelists(三)
摘要:类型排序准则(将最深派生放在最前方)Typelists3.h #include "../型别选择/select.h"//for template<class If, class Then, class Else> struct Select;#include "../编译期间侦测可转换性和继承性/Conversion.h"//for #define DERIVE_BASE_CLASS#include "Typelists2.h"//从Tlist中找到T的最深派生类template<class TList, class 阅读全文

posted @ 2011-03-22 20:01 Observer 阅读(220) 评论(0) 推荐(0)

Typelists(二)
摘要:定义部分 Typelists2.h #include "Typelists.h"//类型链表的连接/*****两者都是类型(非TypePair),实际上就是TypePair的构造器:*****/template<class T, class U>struct Connect{ typedef Typelists_2(T, U) Result;};template<class T>struct Co... 阅读全文

posted @ 2011-03-22 13:44 Observer 阅读(245) 评论(0) 推荐(0)

Typelists(一)
摘要:实现部分 Typelists.h //想想看一个std::pair变量能够拥有无数的变量//如果元素不是变量而是类型,会是什么景象呢?template<class T, class U>struct TypePair{ typedef T First; typedef U Second;};//如同c字符串,使用一个人为定义的空类来作为结束struct NullType;//方便使用,定义出不同数... 阅读全文

posted @ 2011-03-18 21:48 Observer 阅读(317) 评论(0) 推荐(0)

编译期间侦测可转换性和继承性
摘要:如何发现类型A可以隐式转换成为类型B,归根结底都落在了函数形参的匹配上,无论是明白的函数调用或是operator =的使用。如果一个接受类型B的函数可以接受A,那就说明了问题。如何知道两者调用了相同的函数(运行期)或者说如何知道两者决定调用相同的函数(编译期)。在运行期检查的方式简直多如牛毛,但是如何在编译期就检查出来呢?这还不容易,就仅仅定义一个这个函数,如果可以转化就通过编译,如果不能转化就报... 阅读全文

posted @ 2011-03-18 14:06 Observer 阅读(337) 评论(0) 推荐(0)

型别选择
摘要:型别到型别的转换目的是为了在编译期决定调用哪一部分的代码,型别选择则是以在编译期决定使用何种型别为目的。 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 阅读(176) 评论(0) 推荐(0)

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

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

编译期断言
摘要:书中列出三种编译期断言的实现方式,一一列出: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 阅读(680) 评论(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 阅读(355) 评论(0) 推荐(0)

导航