在某个头文件中定义了模板函数,在其他的多个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的接口与实现都是写在一起的。第二个问题:如果是这样的话,那这岂不是不得不“开源”了?不得不将实现给用户看。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.