问题 我愿更好地了解C++模板系统在方面的工作。 问题。
我知道,基于模板的班级和职能通常被放在头版档案中。 这是因为管理通用数据类型的技术问题,而这种特性在原则上不为人所知。 一旦知道,汇编者可产生适合所需数据类型的可执行守则。
在标题档案something.h
中,我们的类别定义如下:
template <typename T>
class Something
{
public:
void setElement (T &elem) {
element = elem;
}
T getElement () {
return element;
}
private:
T element;
};
如今,允许将来源和类别定义分开:
以下类别定义将载于<编码>随附
template <typename T>
class Something
{
public:
void setElement (T &elem);
T getElement ();
private:
T element;
};
虽然以下方法将在<编码>中填写。
#include "something.h"
template <typename T>
void Something<T>::setElement (T &elem)
{
element = elem;
}
template <typename T>
T Something<T>::getElement ()
{
return element;
}
除非我们宣布在<条形码>中的某些特定类型的事例,否则,如果我们将其编成目标文件,我们就没有获得其中的任何文字部分:
dacav@mithril:<tmp>$ g++ something.cpp -c
dacav@mithril:<tmp>$ objdump -D something.o
something.o: file format elf64-x86-64
Disassembly of section .comment:
0000000000000000 <.comment>:
0: 00 47 43 add %al,0x43(%rdi)
3: 43 3a 20 rex.XB cmp (%r8),%spl
...
...
20: 34 2e xor $0x2e,%al
22: 31 00 xor %eax,(%rax)
dacav@mithril:<tmp>$
如马丁纽约所示:。 我们可以迫使汇编者为某些特定数据类型制定守则,以便控制哪些类型可以使用,哪些类型无法使用。 但是,如果我们不想要限制,什么呢?