C++之模板特化
来源:互联网 发布:网络推广威客 编辑:程序博客网 时间:2024/06/01 07:57
关于C++中的模板,一直只会用最基础的部分。今天从网上找了一个文档,总结如下
函数模板特化
其实就是针对一个函数模板,定义一个特定类型的函数,函数模板更加具有通用性。
#include <stdio.h>#include <string.h>template <typename T>int compare( T const & l, T const & r){return l < r ? -1 : ( l == r ? 0 : 1);}/*如果程序由多个文件构成,模板特化的声明必须在使用该特化的每个文件中出现。*/template <>int compare<const char *>(const char * const & l, const char * const & r);template <>int compare<const char *>(const char * const & l, const char * const & r){return strcmp(l, r);}intmain(int argc, char * argv[]){printf("%d\n", compare("aaa", "abc"));printf("%d\n", compare(1 , 2 ));printf("%d\n", compare(3.0 , 1.0 ));return 0;}
类模板特化
#include <stdio.h>#include <stdlib.h>#include <string>#include <vector>#include <assert.h> #include <queue>using namespace std;template <class T>class Queue{private:queue<T> qu;public:void push(T const & elem){qu.push(elem);}void pop(){qu.pop();}T & back(){return qu.back();}T & front(){return qu.front();}ssize_t size(){return qu.size();}};template <>class Queue<const char *>{private:queue<std::string> qu;public:void push(const char * const & elem){qu.push(elem);}void pop(){qu.pop();}std::string & back(){return qu.back();}std::string & front(){return qu.front();}ssize_t size(){return qu.size();}};intmain(int argc, char * argv[]){Queue<const char *> q;q.push("hello");q.push("china");return 0;}
特化成员而不特化类
#include <stdio.h>#include <stdlib.h>#include <string>#include <vector>#include <assert.h> #include <queue>#include <string.h>using namespace std;template <class T>class Queue{private:queue<T> qu;public:void push(T const & elem){qu.push(elem);}void pop(){qu.pop();}T & back(){return qu.back();}T & front(){return qu.front();}ssize_t size(){return qu.size();}};template <>void Queue<const char *>::push(const char * const & src){char * buf = new char[strlen(src) + 1];memcpy(buf, src, strlen(src));buf[strlen(src)] = 0;qu.push(buf);}template <>void Queue<const char *>::pop(){const char * buf = qu.front();qu.pop();delete[] buf;}int main(int argc, char * argv[]){Queue<const char *> q;q.push("Hello,world");q.push("China Linux");printf("%s\n", q.front());q.pop();printf("%s\n", q.front());q.pop();return 0;}
类模板的部分特化
#include <stdio.h>#include <stdlib.h>#include <string>#include <vector>#include <assert.h> #include <queue>#include <string.h>using namespace std;template<typename T1, typename T2, typename T3>class SomeClass{public:void func(){printf("SomeClass<T1, T2, T3>::func()\n");}};template<typename T1>class SomeClass<T1, int, std::string>{public:void func(){printf("SomeClass<T1, int, std::string>::func()\n");}};int main(int argc, char * argv[]){SomeClass<int, int, std::string> s1;s1.func();SomeClass<int, int, int> s2;s2.func();return 0;}
0 0
- 【c++】模板的特化
- C++之模板特化
- C++—模板特化和偏特化
- 【C++】模板类、特化以及偏特化!!!
- 用汇编的眼光看c++(之模板函数) ,(之缺省模板、特化模板) .
- Linux C/C++ 模板:主模板、完全特化、局部特化
- C++:函数模板、类模板及其特化
- C++——模板特化和偏特化
- C++——模板特化和偏特化
- C++——模板特化和偏特化
- C++——模板特化和偏特化
- 用汇编的眼光看C++(之缺省模板、特化模板)
- 用汇编的眼光看C++(之缺省模板、特化模板)
- 用汇编的眼光看C++(之缺省模板、特化模板)
- 用汇编的眼光看C++(之缺省模板、特化模板)
- 用汇编的眼光看C++(之缺省模板、特化模板)
- C++模板之特化与偏特化详解
- C++模板之特化与偏特化详解
- Linux下vi的基本用法指南
- NGUI 3.0.2 example 8
- B/S verse C/S
- 文本编辑软件
- HTML解析组件HtmlAgilityPack使用
- C++之模板特化
- 【算法-排序之四】希尔排序
- myeclipse内存不足解决方法
- dtplayer编译运行说明
- Exercise 29:If 是什么
- 设置eclipse文件编码格式
- Fruit Ninja(水果忍者)游戏源代码下载、分析(上)---可运行Android,Ios,Window,Mac,Html5平台
- js中style、currentStyle、getComputed、runtimeStyle的区别
- 我的学习笔记(在C#里用MVC实现水晶报表)