在某个头文件中定义了模板函数,在其他的多个cpp文件中需用这个函数。比如下面的例子:
// a.h
template<class T>
void foo(T t) {
// 这里有许多实现代码
}
// test.cpp
#include "a.h"
void test() {
foo(1);
}
// test2.cpp
#include "a.h"
void test2() {
foo(2);
}
这两个cpp文件编译后都会产生foo的函数体(实例化,模板参数 T 都是int),这两份函数体是一样的,这岂不是冗余?非模板的类和函数可以将实现分离,不存在这个问题。我查了下,发现将模板的接口与实现分离是不太好的,STL的接口与实现都是写在一起的。第二个问题:如果是这样的话,那这岂不是不得不“开源”了?不得不将实现给用户看。