STL知识(1)--为什么需要有模板?
2017-08-27 14:33
211 查看
一、为什么需要有模板?
以实现比较大小函数功能为例子,我们如下展开代码:
为同一种数据结构或者算法定义适用于不同类型的版本。–代码冗余
借助参数宏拜托类型的约束,同时也丧失了类型的安全。–潜在风险
让预处理器自动的生成不同类型的函数版本。 –不易调试
编写带有参数化类型的通用版本,让编译器自动的生成针对不同类型的具体版本。 –模板!
以实现比较大小函数功能为例子,我们如下展开代码:
为同一种数据结构或者算法定义适用于不同类型的版本。–代码冗余
#include <iostream> using namespace std; int max_int(int x, int y) { return x > y ? x : y; } double max_double(double x, double y) { return x > y ? x : y; } string max_string(string x, string y) { return x > y ? x : y; } int main(void) { cout << max_int(123, 456) << endl; cout << max_double(1.23, 4.56) << endl; cout << max_string("hello", "world") << endl; return 0; }
借助参数宏拜托类型的约束,同时也丧失了类型的安全。–潜在风险
#include <iostream> using namespace std; #define max(x, y) ((x) > (y) ? (x) : (y)) int main(void) { cout << max(123, 456) << endl; cout << max(1.23, 4.56) << endl; cout << max("hello", "world") << endl; return 0; }
让预处理器自动的生成不同类型的函数版本。 –不易调试
#include <iostream> using namespace std; #define MAX(T) \ T max_##T(T x, T y) \ { \ return x > y ? x : y; \ } MAX(int) MAX(double) MAX(string) #define max(T) max_##T int main(void) { cout << max(int)(123, 456) << endl; cout << max(double)(1.23, 4.56) << endl; cout << max(string)("hello", "world") << endl; return 0; }
编写带有参数化类型的通用版本,让编译器自动的生成针对不同类型的具体版本。 –模板!
#include <iostream> using namespace std; template <typename T> T max(T x, T y) { return x > y ? x : y; } int main(void) { cout << ::max<int>(123, 456) << endl; cout << ::max<double>(1.23, 4.56) << endl; cout << ::max<string>("hello", "world") << endl; return 0; }
相关文章推荐
- 技术人,为什么需要构建知识图谱
- 思维导图用于商务招待+为什么只有人需要讲故事思维导图模板
- 技术人,为什么需要构建知识图谱
- (java 必备知识之三) 浅谈java散列原理,为什么java需要散列集合?
- SQL Server中的TempDB管理——TempDB基本知识(为什么需要版本存储区)
- Vlan知识之一:为什么需要VLAN
- java模板 Java做acm所需要的基础知识之基本输入输出问题
- C++ STL模板与容器 知识 初学 小结 ( 二 )
- JAVA模板 Java做acm所需要的基础知识之排序问题
- SQL Server中的TempDB管理——TempDB基本知识(为什么需要版本存储区)
- 技术人,为什么需要构建知识图谱 (转载)
- SQL Server中的TempDB管理——TempDB基本知识(为什么需要版本存储区)
- C++ STL模板与容器 知识 初学 小结 ( 一 )
- C++ STL模板与容器 知识 初学 小结 ( 三 )
- 【虚拟化基础知识培训】为什么需要了解下虚拟化
- SQL Server中的TempDB管理——TempDB基本知识(为什么需要版本存储区)
- 1.为什么需要用到模板引擎
- SQL Server中的TempDB管理——TempDB基本知识(为什么需要版本存储区)
- 为什么知识需要整理需要管理!?
- 为什么需要知识图谱?什么是知识图谱?——KG的前世今生