[1.x] 函数模板Function Template

| ```cpp // eg : swap() template template void swap(T &x,T &y){ T tmp; tmp = x , x = y , y = tmp; }

  1. <br />- `template`语句需要**单独成行**,其中`class`有时也写成`type`,`T`可以更换<br />- `template < class xxx >`影响的是它以下的那块部分<br />- 模板又叫**元代码**,检测到需求时,会将模板**实例化**一个部分来实现这个需求<br />- 需要注意,当使用模板时,必须要求每一个实例中`T`必须一样<br />```cpp
  2. template < class T >
  3. void funName(T x){
  4. T y;
  5. // ...
  6. }
  7. template < class T >
  8. void myFun(T x, T y){
  9. // ...
  10. }
  11. // myFun('c',1.0); 会报错,因为两个参数类型不一样,但模板要求两个参数类型一样


- 当参数中没有T但是函数内部会用到的时候,可用尖括号指明类型
```cpp template < class T > void fun( void ){ //… } // fun(); 尖括号中的内容用来声明模板中的类型

  1. |
  2. | --- |
  3. <a name="GV488"></a>
  4. # [2.x] 类模板Class Template
  5. | ```cpp
  6. // eg : vector template
  7. template < class T >
  8. class Vector{
  9. public:
  10. Vector(int);
  11. ~Vector();
  12. Vector(const Vector&);
  13. Vector &operator=(const Vector&);
  14. T &operator[](int);
  15. private:
  16. T *m_elements;
  17. int m_size;
  18. };

image.png
image.png
image.png
image.png
- 需要**注意**:template语句属于声明,需要放在.h
image.png | | —- |

[3.x] 元函数Meta Function

[大一寒假] Stanford CS 106L - Standard C++ programming
[大一寒假] Stanford CS 106L - Standard C++ programming