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