1.最近写了一些模板函数,报着想不变动头文件的常规做法把模板的实现放到了.cpp里,发现编译不过。
2.查了下 C++ Primer,是有这么一个语法特性,可以在实现文件里定义模板,但是目前没有编译器支持,仔细想想也是,C++的模板只有在调用时才能确定类型,生成C++实例源函数,如果.cpp里放入了定义,在编译时,如果没有调用,如何生成确定类型的实例,所以如果要支持,肯定要编译器对这种情况额外处理。所以因此基本上没有编译器支持。
模板编译模式有两种
1.包含编译模式,在头文件里声明并定义.
2.分离编译模式,在头文件里声明,在实现文件里定义[不过这个gcc 4.4都不支持]
.h template <typename Type> Type min( Type t1, Type t2 ); .cpp export template <typename Type> Type min( Type t1, Type t2 ) { /* ...*/ }