2011-05-21 59 views
1

有人可以用简单的格式解释这个吗?什么是C++中的模板

有模板函数和模板类。有什么优点和缺点?我听说模板构建缓慢,甚至在运行时?

是吗?

THX

+1

阅读文档http://www.cplusplus.com/doc/tutorial/templates/它有大量的例子。 – 2011-05-21 03:39:37

+0

[这是一个专用于C++模板的FAQ页面](http://www.parashift.com/c++-faq-lite/templates.html)。 – 2011-05-21 03:40:17

+1

我不明白为什么这个问题关闭了。他只是问“什么是模板,为什么/为什么不是一个好主意?”。 – Bingo 2011-05-21 03:54:38

回答

2

在C++中,你必须重载功能的能力,例如:

void do_something(object1 ob); 
void do_something(int i); 

好,模板让你做出“通用”的功能,或采取任意类型的类。因此,不是每次添加类型都要定义一个函数,您可以定义一次,让编译器为您编写所有函数。

template<typename T> 
void do_something(T arg); 

使用类可以根据类型差异创建变体。我能想到的最好的例子是std :: vector ..你可以把它想象成一个容器/数组/任何任何东西。但是,你需要定义类型前期(所以它知道每个元素有多大,如何对各种元素等复印件):

std::vector<int> vector_of_ints; 
std::vector<std::string> vector_of_strings; 
... 

因为正在发生的事情,实际上,是编译器编写附加功能对于你在编译时,不应该有任何运行效果。但是,在运行时可能会出现这个问题,如果你有太多的模板代码,这会导致代码膨胀,并且这可能导致执行缓存未命中......但在当今的硬件上,这应该不成问题。

我看到的主要缺点是,您必须将模板放在公开您的实现的头文件中。我也发现它们很难调试,因为它们可能会产生相当混乱的编译器错误消息。

0

总结了这一切:

如果你写一个函数add(INT A,INT B)?如果你的添加可以为所有的数据类型做它不是很好吗?不只是int而不需要做超过1个函数?这就是模板进入的地方。它们使得它只需要一个函数来封装多种类型。

这将是你怎么做的函数:这​​里

template<typename T> 
T add(T a, T b);