Template(STL/BOOST)
renwotao2009
努力程度之低,离拼天赋还远的很
展开
-
模板之泛化仿函数(一)
1 泛化仿函数的要求参数个数应该是任意的,参数的型别也应该是任意的。// 我们的Functor 应该是这样的,Functor 只是一个 wrapper(外覆类) template class Functor{public: ResultType operator()(); // 转发函数 ResultType operator(Parm1 p1); ResultT原创 2014-11-29 17:48:21 · 2534 阅读 · 0 评论 -
模板之泛化仿函数(二)
实现 STL 的 BindFirst 功能假设有个 Functor 取两个整数作为参数,你想将其中一个整数绑定为固定值,只让另一个变化。绑定会产生出一个”只取单一整数“的 Functor,如下:void f(){ // Define a Functor of two arguments Functor cmd1(something); //原创 2014-11-29 21:32:42 · 897 阅读 · 0 评论 -
编译错误模板参数太多的几种情况
编译器报错:模板参数太多的错误1 C++ 不允许同名而参数个数不同的 templates 存在templateclass Functor{};template class Functor{};2 特例1:模板的偏特化与模板原型声明的模板参数个数不同// 模板原型templateclass Functor{};// 模板的偏特化,增加了参数 Parm1te原创 2014-11-26 13:33:08 · 8386 阅读 · 0 评论 -
模板之Typelist的"增删改查"
1 Typelist 的索引式访问原创 2014-11-20 19:26:33 · 939 阅读 · 0 评论 -
模板之TypeTraits
Traits 是一种 “可用于编译器根据型别作判断” 的泛型技术,像在执行期根据数值执行判断一样。Traits 好处:可以在 ”型别确立当时“意外的其他地点做出与型别相关的判断。这会让代码变得比较干净,更具可读性原创 2014-11-20 12:27:38 · 732 阅读 · 0 评论 -
模板之Typelists
Typelists 是一个只携带类型信息的想列表原创 2014-11-20 15:47:54 · 978 阅读 · 0 评论 -
模板之编译器侦测可转换型和继承性
问题:如何知道 U 是否继承自 T原创 2014-11-19 09:30:19 · 912 阅读 · 0 评论 -
模板的偏特化
template class Window, class Controller>class Widget{ ....};// 特化// 其中 ModalDialog 和 MyController 是另外定义的 classtemplate<>class Widget{ ....};// 偏特化// 其中 Window 是泛化类型参数原创 2014-11-12 10:01:23 · 790 阅读 · 0 评论 -
模板之型别选择
问题:在NiftyContainer 例子中,也许以一个std::vector 作为后端存储结构。面对 polymorphic 型别,不能存储其对象实体,必须存储其指针。但如果面对 non-polymorphic 型别,可以存储其实体,比较有效率。这时,vector 还是 vector 需要根据 isPolymorphic 来决定 ValueType 定义为 T * 或 T。方法1:可以选择原创 2014-11-18 15:11:58 · 920 阅读 · 0 评论 -
模板之型别对型别的映射
假设 Widget 类定义是我们不能修改的类型:class Widget {public: Widget(int arg, int i = -1) { } ....};现在原创 2014-11-18 10:33:31 · 747 阅读 · 0 评论 -
模板之长整数映射为型别
Int2Type会根据引数所得的不同数值产生不同的型别。这是因为“不同的 template 的具现体”本身是“不同的类型”。因此 Int2Type 不同于 Int2Type,以此类推。用来产生型别的那个数值是一个枚举值。符合下列两个条件便可使用 Int2Type:1 有必要根据某个编译期常数调用一个或数个不同的函数2 有必要在编译器实施“分派”(dispatch)执行期的分原创 2014-11-17 22:57:25 · 857 阅读 · 0 评论 -
EffectiveSTL5
条款26尽量使用iterator 代替const_iterator, reverse_iterator, const_reverse_iteratoriterator insert(iterator position, const T& x);iterator erase(iterator position);iterator erase(iterator rangeBegin,原创 2012-07-24 15:34:52 · 673 阅读 · 0 评论 -
EffectiveSTL3
条款13尽量使用vector 和string 来代替动态分配的数组。一般认为通过引用计数优化字符串很重要,所以c++ 保证了一个合法的实现。多线程环境中使用引用计数的字符处串,避免分配和拷贝所省下的时间都花费在后台并发控制上了。在多线程环境下替代使用引用计数的字符串的三种方案:第一,看看你的库实现是否可以关闭引用计数,通常是通过改变预处理变量的值。当然那是不可移植的,但使工作变原创 2012-07-23 10:24:27 · 610 阅读 · 0 评论 -
EffectiveSTL4
条款19相等和等价的区别相等的概念是基于operator==的。如果表达式“x == y”返回true,x和y有相等的值,否则它们没有。等价的概念是基于operator如:标准库中的find 和set 容器的成员函数find 的区别?条款20为指针的关联容器指定比较类型set ssp; // ssp = “set of string ptrs”ssp.in原创 2012-07-24 10:38:15 · 671 阅读 · 0 评论 -
STL源码剖析1
stl概论stl以抽象概念为主题而非以实际类为主的结构,形成了一个严谨的接口标准。在此接口之下,任何组件都有最大的独立性,并以所谓迭代器胶合起来,或以所谓配接器互相配接,或以所谓仿函数动态选择某种策略。C++允许我们自行定义型别,C++template允许我们将型别参数化,藉由两者结合并透过traits变成技法形成STL。stl六大组件:containers,algorithms,it原创 2012-07-21 16:47:30 · 1002 阅读 · 0 评论 -
EffectiveSTL2
条款7class SpecialString: public string {....}这种行为很危险,因为string像所有的标准STL容器,缺少虚席够函数,从而没有虚析构函数的类共有继承是一个大的c++禁忌。条款8typedef typename iterator_traits::value_type ElementType;涉及在模板中到模板类或普通类中自定义的类型时,需原创 2012-07-20 14:30:02 · 779 阅读 · 0 评论 -
萃取(traits)编程技术的介绍和应用
引子最近在写C++代码的时候, 经常能使用到萃取(traits)编程技术, 于是学习STL中关于萃取的知识, 并总结出来, 以飨读者, 同时加深自己的理解.迭代器中萃取技术STL简述STL(Standard Template Library)是C++泛型编程(template技术)的集大成者, 迭代器在STL中发挥重要的作用. 在STL中有3个重要的概念:容器, 包括顺序容器(vector, lis转载 2016-04-19 19:03:15 · 964 阅读 · 0 评论