模板类型萃取与模板的优缺点分析

Posted 白龙码~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板类型萃取与模板的优缺点分析相关的知识,希望对你有一定的参考价值。

文章目录

模板

一、类型萃取type traits

类型萃取,就是通过模板的特化获取模板参数的类型,比如:

// 非内置类型,返回false
struct FalseType

	bool Get()
	
		return false;
	
;
// 内置类型,返回true
struct TrueType

	bool Get()
	
		return true;
	
;

// 非内置类型模板参数则将IsPodType定义为FalseType
template<class T>
struct TypeTraits

	typedef FalseType IsPodType;
;
// 内置类型模板参数则将IsPodType定义为TrueType
template<>
struct TypeTraits<int>

	typedef TrueType IsPodType;
;
template<>
struct TypeTraits<char>

	typedef TrueType IsPodType;
;
// 其它内置类型这里省略了,定义方式如上

在获取了模板类型的情况下,就可以通过IsPodType.Get()查看它是否是内置类型(POD)。

  • 如果是非内置类型,则IsPodType<=>FalseType,因此IsPodType.Get()返回false;
  • 如果是非内置类型,则IsPodType<=>TrueType,因此IsPodType.Get()返回true;

那么,对应的一些成员函数就可以针对内置类型或非内置类型进行特殊处理,比如:

  • vector的析构函数中,如果模板是内置类型,则无需调用对象的析构函数。
  • vector的扩容中,如果模板是内置类型,则直接使用memset即可完成对象的拷贝,如果是非内置类型,则需要调用拷贝构造或者移动拷贝。

二、模板优缺点分析

1、优点

1、复用了代码,能够节省资源,更快地迭代开发(STL因此诞生)
2、增强了代码的灵活性

2、缺点

1、可读性较差,调试比较困难
2、模板会导致代码膨胀,编译时间变长
3、模板编译错误时,错误信息非常凌乱,不好定位错误的位置

以上是关于模板类型萃取与模板的优缺点分析的主要内容,如果未能解决你的问题,请参考以下文章

STL源代码分析--萃取编程(traits)技术的实现

C++模板进阶

C++模板进阶

C++ 模板 之 类型萃取 与 容器适配器

C++_模板类与类型萃取技术

干货C++通过模板特化实现类型萃取实例--实现区分基本类型与自定义类型的memcpy