0%

C++模板和泛型编程

面向对象编程 (OOP)和泛型编程都能处理 在编写程序不知道类型的情况。不同之处在于 ,OOP能处理类型在程序运行之前都未知的情况,而泛型编程中,在编译时就能获知类型了。而模板是C++泛型编程的基础。

C++是一门强类型语言,所以无法做到像动态语言(python javascript)那样子,编写一段通用的逻辑,可以把任意类型的变量传进去处理。泛型编程弥补了这个缺点,通过把通用逻辑设计为模板,摆脱了类型的限制,提供了继承机制以外的另一种抽象机制,极大地提升了代码的可重用性。

函数模板

如果希望编写一个函数比较两个值,在实际中由于比较的类型不知道,可以通过函数重载的方式写多个同名的函数,编译器会根据不同的调用参数选择对应的函数执行。但是这样编码很麻烦。我们可以通过定义一个通用的函数模板,来简化。

1
2
3
4
template <typename T>
bool compare(const T &v1, const T &v2){
return v1 < v2;
}
  • 模板有关的其他知识

  • 模板偏特化

  • 模板全特化

  • 实参推断