当将类中的模板成员函数(或者一般的模板函数)的声明和定义分别放在.h和.cpp文件中时,当在别的文件调用此模板函数时,可能会出现未定义的情况。
这是由于当你不使用这个模板函数时,编译器并不实例化它。当你使用时,编译器需要实例化它,因为编译器时一次只能处理一个编译单元,也就是一次处理一个cpp文件,所以实例化要看到该模板的完整定义,需要都放在头文件中(即声明和定义都放在.h中即可)。(VC和VS2008需要这样处理,VS2010未知,应该情况类似)。
这不同于普通的函数,在使用普通函数时,编译时只需要看到函数的声明即可编译,而在链接时由链接器来确定该函数的实体。
虚函数在运行期决定行为
模板在编译期决定行为