上一页 1 ··· 159 160 161 162 163 164 165 166 167 ··· 236 下一页
摘要: 体会这一个例子,检查是否是一个类:P187 阅读全文
posted @ 2017-03-01 12:23 blcblc 阅读(212) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2017-03-01 12:14 blcblc 阅读(332) 评论(0) 推荐(0)
摘要: 首先,类模板必须被显式特化。当然了,可以通过一个辅助函数,通过参数类型,返回特化的类模板,来间接处理。 这个技术被广泛应用在ptr_fun, make_pair, mem_fun, back_inserter等辅助函数里面,来完成那些易于出错的类模板特化任务。 跟函数实参推导(根据实参所在的名字空间 阅读全文
posted @ 2017-03-01 12:04 blcblc 阅读(357) 评论(0) 推荐(0)
摘要: 一个是元素类型,一个是配置器类型。 当实例化一个 vector<int>这样的标准容器的时候,得到的其实是 vector<int, std::allocator<int>>。 但是后一个参数可以有缺省值,如下: template <typename T, class Cont=Deque<T> > 阅读全文
posted @ 2017-03-01 11:54 blcblc 阅读(246) 评论(0) 推荐(0)
摘要: traits基本利用了上一篇文章的思想,通过局部特化,来返回针对特定类型的信息。 可以自己实现traits,约定俗成了,返回特性信息。 也可以利用iterator的traits信息。 iterator就是一个从不同容器内获取各自不同类型迭代器的经典例子。获得特定类型迭代器之后,就可以利用迭代器的tr 阅读全文
posted @ 2017-03-01 11:34 blcblc 阅读(465) 评论(0) 推荐(0)
摘要: 上一次面试也问到的。的确是利用了模板元编程。traits也是利用了这一点。 可以方便的获知一个类是不是int. 更重要的是,编译器获知一个变量,是不是指针;是不是数组,甚至是数组的长度;获知是不是指向数据成员的指针。 关于数组和数组长度: 阅读全文
posted @ 2017-03-01 11:19 blcblc 阅读(273) 评论(0) 推荐(0)
摘要: 其实一个重要思想就是利用局部特化。注意特化不仅仅可以用类型,还可以用数值。如下: 阅读全文
posted @ 2017-03-01 11:07 blcblc 阅读(175) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2017-03-01 10:51 blcblc 阅读(282) 评论(0) 推荐(0)
摘要: 模板成员指的是模板里面的成员,有的成员(函数)可以特化。 template<> void ClassA<int> func(); 成员模板,指的是自身是模板的成员。 template <typename T> SList(T begin, T end); 成员模块,还可以用来写拷贝构造函数和赋值操作 阅读全文
posted @ 2017-03-01 10:45 blcblc 阅读(385) 评论(0) 推荐(0)
摘要: 都跟里氏替换原则有关。 协变:你可以用一个子类对象去替换相应的一个父类对象,这是完全符合里氏替换原则的,和协(谐)的变。如:用Swan替换Bird。 逆变:你可以用一个父类对象去替换相应的一个子类对象,这貌似不符合里氏替原则的,不和协(谐)的逆变。如:用Bird替换Swan。 阅读全文
posted @ 2017-03-01 00:47 blcblc 阅读(176) 评论(0) 推荐(0)
上一页 1 ··· 159 160 161 162 163 164 165 166 167 ··· 236 下一页