http://www.sychzs.cn/lvdongjie/p/4288373.html
如何分离C++模板类头文件和实现文件。这个问题与编译器有关。
引用<
提出的问题:(发帖地址:http://www.sychzs.cn/u/20101215/15/f4f270f2-f0f9-4c5f-8765-1bfde2aeebbf.html)
第一种方法:按照C++primer中的“include”模型,使用定义模板类的头文件最后一行语句:#include "template_compile.cpp"
类模板头文件template_compile.h中:
类模板的实现文件template_compile.cpp中:
在使用模板的测试文件use_template.cpp中:
该方法无法编译,“template_compile.cpp”文件无法“看到”“template_compile.h”文件。
但是:如果我把类模板的实现文件中的代码放在类模板的头文件中,并注释掉:#include "template_compile.cpp",那么编译运行就不会出错了。理论上,“将类模板的实现文件中的代码放在类模板的头文件中”与“使用定义模板类的头文件最后一行的语句:#include”template_compile.cpp 是一致的”,但是编译器就是打不通。
实验证明:VC9.0不支持C++primer中提到的“include”模型。
第二种方法:bruceteen提出:使用define
类模板头文件template_compile.h中:
类模板的实现文件template_compile.cpp中:
测试文件保持不变。
实验证明:在VC9.0中,该方法可以实现类模板头文件和实现文件的分离
方法三:
类模板头文件template_compile.h中:
类模板的实现文件template_compile.cpp中:
在使用模板的测试文件use_template.cpp中:使用#include "template_compile.cpp"
实验证明:在VC9.0中,该方法可以实现类模板头文件和实现文件的分离。
另外,实验证明VC9.0不支持“单独编译”模式。
-->