模板函数在使用中遇到的一个问题
c++在写模版函数时(template之类的),头文件与cpp文件分离, 会出现undefine symbol的链接问题
例如
A.h
#include
clase A {
public:
template<T>
void FindSomething(T id);
}
A.cpp
#include "A.h"
template<T>
void A::FindSomething(T id) {
std::cout << "Hello " << id << std::endl;
}
}
编译器在生成代码过程中 编译器必须看到模板的定义与特定type下的实现 (比如模板是int,则需要知道int下该函数的具体实现)
这里解决的方法有两个
- 把实现移动到 头文件中
- 再cpp文件中加上模板特例的定义 例如A.cpp的最后加上
template void A::FindSomething<std::string>(std::string id)
方法1的缺点 代码膨胀 取决于编译器的性能。 建议在明确使用的类型并且不多的情况下使用方法2