前言
在前面的介绍中,我们已经多次接触到traits,traits是一种泛型编程技法,用侯捷老师的话说,traits可以回答算法提出的问题,本文我们就来看看基本的traits技法和STL中的traits。
traits原理
泛型编程通过传入模板元的方法统一了不同类型的接口,在编译时,类型能够自动推导为传入的类型,这被称为泛化,比如下面的结构:
template <typename T>
struct A{
bool value = true;
};
泛化时与传入的参数类型是无关的,无论T的类型是什么,value都被初始化为true。与泛化相对的概念叫特化,特化只当传入特定类型时才被调用。
template <>
struct A<int>{
bool value = false;
};
我们来看看上面两个结构体的调用结果,测试代码如下:
#include <bits/stdc++.h>
template <typename T>
struct A{
bool value = true;
};
template <>
struct A<int>{
bool value = false;
};
int main(){
A<bool> a1;
A<int> a2;
std::cout << "a1:" << a1.value << ",a2:"