模板在翻译单元中的显示方式
How does a template appear in a translation unit?
如果我在list.h中有一个模板化的类定义:
template <class T>;
class list {
list *next;
T *data;
list(T *data){
this->next = NULL;
this->data = data;
}
void concat(T *data){
this->concat(new list<T>(data));
}
void concat(list<T> *sublist){
if (this->next != NULL){
this->next->concat(sublist);
} else {
this->next = sublist;
}
}
}
那么如果我有主.cpp:
class bar {
bar(){
}
}
class baz {
baz(){
}
}
void main(){
new list<bar>(new bar());
new list<baz>(new baz());
}
然后我跑了:
gcc -c main.cpp
- 代码如何放入翻译单元?
- main.cpp 的翻译单元有 2 个版本的列表吗?
- 如果我们的列表包含在另一个翻译单元中,它会同时出现在两者中吗?
当您专用化模板时,代码将放置在进行专用化的翻译单元中。
如果您在单独的翻译单元中反复使用模板,您会发现每个翻译单元都会获得代码的副本。 这称为代码膨胀,是使用模板的主要缺点之一。
您可以声明模板专用化,并将这些专用化的代码放在单个翻译单元中,但是如果没有此处相同的链接器问题,您将无法创建新的专用化。
到 # 2:当类型足够相似时,某些编译器将使用单个定义。 例如存储指针。 您可以创建十几种不同的指针类型,只有将它们作为单独类型处理的代码才需要使用类型专用化进行复制。 但这高度依赖于编译器。
相关文章:
- 如何以编程方式使窗口全屏显示?
- 如何以编程方式显示功能区按钮的下拉菜单?
- PyQT - 在 QTableWidget 单元格中显示垂直文本
- 以编程方式在任何按钮上突出显示 Qt 鼠标悬停按钮
- 只显示片段着色器的最佳方式是什么
- 将 GtkTreeView 中的单元格设置为以编程方式编辑模式
- 使用 C++ 显示 (.lnk) 快捷方式文件的真实路径
- 精灵不显示我希望它们显示的方式
- 在Visual Studio c++中显示jpeg流的最佳方式
- 二进制文件中的某些数据如图所示,并以奇怪的方式显示OS
- 始终在QTableView的单元格中显示Qcombobox
- 在一个 QTableWidget 单元格中显示不同颜色的字符串
- Qt表查看单元格中的显示图像并在单击时获取路径
- 模板在翻译单元中的显示方式
- 为什么我的所有测试方法都没有显示在VS2008中单元测试的测试列表中?
- 当鼠标右键单击(C /C#)时,如何获得快捷方式显示名称
- 提升单元测试 Visual Studio 未显示在控制台中
- 如何获取哪些快捷方式和文件在桌面等文件夹路径中突出显示
- Can运算符<<用于设计我们自己的输出显示方式
- 我如何循环矩阵数据的显示方式