一. 模板全特化
有时当通用模板无法处理特定类型,需要对模板参数进行特殊处理,即为特化。
// 通用模板 template<class T> struct A { int x; }; // 特化T=double,模板为空 template<> struct A<double> { int y; };
模板偏特化,即对模板部分参数进行特化。
// 通用模板 template<class T, class P> void foo(T t, P p){} // 偏特化,第二个参数指定int template<class T> void foo(T t, int p)
二. 类型过滤
实现接口只支持某些类型参数,可很简单通过模板特化实现。
// 未实现 template<class T> struct Support; // 特化int template<> struct Support<int>{}; // 调用 Support<int> a; // ok Support<char> b; // error
三. 类型萃取
重构旧系统时,发现某个函数有多个冗余实现,只是参数类型不同,可考虑用模板进行提炼。
// 原有代码 void foo(int); void foo(A const&); // 模板层 template<class T> void foo(T const&);
调用:foo(1) 时会编译出错,因为该模板无法处理传值类型。如何用一个模板函数同时支持传值或引用方式呢?
这就要用到Type Traits技术了,简言之提取“被传进的对象”对应的返回类型,让同一个接口实现对应的功能。
// 主版本 template<class T> struct TypeMapping { typedef T const &type; }; // 特化类型 template<> struct TypeMapping<int> { typedef int type; }; // 接口层 template<class T> void foo(TypeMapping<T>::type v) { }
四. 插入继承链
已知类继承关系:
A --> A1 --> B
A --> A2 --> C
A/B/C类均实现了foo()虚函数,现要为B和C的foo()添加一段相同的功能。在不修改父类A1、A2的前提下,如何实现?
我们可通过插入模板层来实现,该技巧也常用来模拟虚函数调用(虚函数调用会查询虚表,有性能损耗)。
// 模板层 template<class Base> class X : public Base { virtual void foo() { xxx; // 新增功能代码 Base::foo(); } }; // B继承模板 class B: public X<A1> { typedef X<A1> base_class; virtual void foo() { xxx; base_class::foo(); } }; // C继承模板 class C: public X<A2> { typedef X<A2> base_class; virtual void foo() { xxx; base_class::foo(); } };
B/C只需要继承同一个模板层,常用来对库进行封装。
相关推荐
c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件...
C++模板与STL库介绍 非常详细
C++模板元编程,ISBN:9787111267423,作者:(美)大卫 等著,荣耀 译 原作名: C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond 出版年: 2010-1 页数: 277
C++模板元编程.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
c++ 模板使用入门 c++ 模板使用介绍 pdf
本书是c++模板编程的完全指南,旨在通过基本概念,常用技巧和使用实例3方面的有用资料,为读者打下c++模板坚实的基础
用C++模板方式实现自定义单链表,交流学习用
c++模板详细描述
c++模板元编程代码
两本学习C++模板的书,先学习C++模板再学习模板元编程,中高级难度
一个DevC++工程,工程中是模板类的试用,用最简单的语句,便于理解C++模板编程
数据结构各种算法实现(C++模板).doc数据结构各种算法实现(C++模板).doc数据结构各种算法实现(C++模板).doc数据结构各种算法实现(C++模板).doc数据结构各种算法实现(C++模板).doc数据结构各种算法实现(C++模板).doc
c++模板元编程 光盘 去掉boost库和一些东东 7z自解压
C++模板类型题型,更全面,也可以更从中了解模板的运用与技术。
c++开源项目 将c++模板编程推向了一个新的高峰,同时这也是模板元编程的非常好的一份源代码
所谓元编程就是编写直接生成或操纵程序的程序,C++ 模板给 C++ 语言提供了元编程的能力,模板使 C++ 编程变得异常灵活,能实现很多高级动态语言才有的特性(语法上可能比较丑陋,一些历史原因见下文)。普通用户对 ...
用模板类实现的一个简易的c++程序,实现了快速排序。