a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 44|回复: 0

[C++] 理解C++编译器编译模板类的过程(1)

[复制链接]
发表于 2012-7-31 21:56:58 | 显示全部楼层 |阅读模式
  前言5 S: y$ M7 Z0 n7 b, i
  常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”。看看我们几乎每天都能遇到的模板类吧,如STL, ATL, WTL, 以及Boost的模板类,都能体会到这样的滋味:接口简单,操作复杂。+ f+ r0 q& ?7 B) w" M3 ^* o- v( W
  本文对象是那些熟悉模板但还没有很多编写模板经验的程序员。本文只涉及模板类,未涉及模板函数。但论述的原则对于二者是一样的。
! a* l; x1 Y; _. X  问题的产生
% D7 Z, {3 s' Y. D  通过下例来说明问题。例如在array.h文件中有模板类array:
& {1 ^) U# i- Y/ z4 l; }  // array.h; }- h: J- [$ z9 @5 y
  template 6 H* W, B& e( q2 i' b! o
  class array4 j$ ~3 E0 @1 _2 S' t* J
  {0 Z# F+ Z* k5 K4 `1 i+ Z) y' `
  T data_[SIZE];  \, e) _" t8 n6 \
  array (const array& other);% X1 _- r$ R, f: w" r3 S
  const array& operator = (const array& other);
6 o8 d0 L. L5 K1 X+ Z% \7 D& U4 K1 z7 M' l  public:
0 q' S& t( U! D; i4 Y  array(){};
; ^' O$ m# o, C2 p. W; x+ X  T& operator[](int i) {return data_;}
- H$ L5 ^2 B" D" _  const T& get_elem (int i) const {return data_;}# B4 O1 @6 T7 P, I" D
  void set_elem(int i, const T& value) {data_ = value;}7 r5 c. o" y5 t4 K
  operator T*() {return data_;}
6 a+ m* r1 @0 `! d0 }  };
- E/ J  k! \4 q  然后在main.cpp文件中的主函数中使用上述模板:! S7 c& j% H6 n; e* ~
  // main.cpp9 y+ l8 C  g. n2 m# F! g/ u' z
  #include "array.h"
; i" {: r$ R* @. G  int main(void)5 |9 p6 W: G7 `" @5 K
  {
+ h- h' X! o% a( v  array intArray;
9 I2 Z. _( d( I6 |# U# G( d1 S! G  intArray.set_elem(0, 2);! l# P* n9 m, C4 V( `4 W
  int firstElem = intArray.get_elem(0);
4 @  a2 Z1 C$ ~  int* begin = intArray;- Z( N5 K: @' U! Z5 s
  }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-18 12:56 , Processed in 0.220630 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表