模板类声明和定义.docVIP

  • 4
  • 0
  • 约 10页
  • 2017-08-19 发布于北京
  • 举报
如何组织编写模板程序 前言 常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”。看看我们几乎每天都能遇到的模板类吧,如STL, ATL, WTL, 以及Boost的模板类,都能体会到这样的滋味:接口简单,操作复杂。 我在5年前开始使用模板,那时我看到了MFC的容器类。直到去年我还没有必要自己编写模板类。可是在我需要自己编写模板类时,我首先遇到的事实却是“传统”编程方法(在*.h文件声明,在*.cpp文件中定义)不能用于模板。于是我花费一些时间来了解问题所在及其解决方法。 本文对象是那些熟悉模板但还没有很多编写模板经验的程序员。本文只涉及模板类,未涉及模板函数。但论述的原则对于二者是一样的。 问题的产生 通过下例来说明问题。例如在array.h文件中有模板类array: // array.h template typename T, int SIZE class array { ??? T data_[SIZE]; ??? array (const array other); ??? const array operator = (const array other); public: ??? array(){}; ??? T operator[](int i) {return data_[i];} ??? const T get_elem (int i) const {return data_[i];} ??? void set_elem(int i, const T value) {data_[i] = value;} ??? operator T*() {return data_;}?????? };???????????? ???????????? 然后在main.cpp文件中的主函数中使用上述模板: // main.cpp #include array.h int main(void) { arrayint, 50 intArray; intArray.set_elem(0, 2); int firstElem = intArray.get_elem(0); int* begin = intArray; } ???????? 这时编译和运行都是正常的。程序先创建一个含有50个整数的数组,然后设置数组的第一个元素值为2,再读取第一个元素值,最后将指针指向数组起点。 但如果用传统编程方式来编写会发生什么事呢?我们来看看: 将array.h文件分裂成为array.h和array.cpp二个文件(main.cpp保持不变) // array.h???????? template typename T, int SIZE class array { ????? T data_[SIZE]; ????? array (const array other); ????? const array operator = (const array other); public: ????? array(){}; ????? T operator[](int i); ????? const T get_elem (int i) const; ????? void set_elem(int i, const T value); ????? operator T*();?????? };???????? ???? // array.cpp #include array.h templatetypename T, int SIZE T arrayT, SIZE::operator [](int i) ??? { ??? return data_[i]; ??? } templatetypename T, int SIZE const T arrayT, SIZE::get_elem(int i) const ??? { ??? return data_[i]; ??? } templatetypename T, int SIZE void arrayT, SIZE::set_elem(int i, const T value) ??? { ??? data_[i] = value; ??? } templatetypename T, int SIZE arrayT, SIZE::operator T*() ??? { ??? return data_; ??? } ???????? 编译时会出现3个错误。问题出来了: 为什么错误都出现在第一个地方? 为什么只有3个链接出错?array.cpp中有4个成员函数。 要回答上面的问题,就要深入了解模板的实例化过程。 模板实例化 程序员在使用模板类时最常犯的错误

文档评论(0)

1亿VIP精品文档

相关文档