1、数据结构:能够存储任意类型
2、能够操作存储任意类型数据的数据结构
模板(泛型编程)
template<typename T>与template<class T>效果是一模一样的
当a, b的类型不一致时,会报错,
解决方案一:
要改成add<统一的类型>(3, 4.5).
add<double>(3, 4.5)
解决方案二:
把template<typename T>改成template<typename T, typename U>
把T add(T a, T b)改成 T add(T a, U b);
如果add(2, 4.5)那么就是int add(int a, double b);
如果add(4.5, 2)那么就是double add(double a, int b)
解决方案三:
decltype(): 根据表达式推导表达式的返回类型,不进行表达式计算
decltype(4.5, 2):推导double
decltype(2, 4.5):推导double
decltype(2, 4):推导int
了解以上就可以这样用:
template<typename T, typename U>
decltype(T(), U()) add(T a, U b){
return a + b;
}
以上依旧有bugs,当T和U没有构造函数时会报错
解决方案四:
返回值后置:auto -> decltype()
template<typename T, typename U>
auto add(T a, U b) -> decltype(){
return a + b;
}