什么是C ++中的模板

时间:2011-05-21 03:34:25

标签: c++ templates

有人可以用简单的格式解释这个吗?

有模板函数和模板类。有哪些优点和缺点?我听说模板构建起来很慢,甚至在运行时也是如此?

真?

THX

2 个答案:

答案 0 :(得分: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;
...

因为正在发生的事情是编译器在编译时为您编写附加函数,所以不应该有任何运行时效果。但是在运行时可能会出现问题,因为你有很多模板代码,导致代码膨胀,这可能导致执行缓存未命中......但在今天的硬件上,这应该不是问题。 / p>

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

答案 1 :(得分:0)

总结一下:

如果你写一个函数add(int a,int b)?如果您的添加可以为所有数据类型执行此操作,这不是很好吗?不仅仅是int而不需要创建多于1个函数?这就是模板的用武之地。它们使得它只需要一个函数来封装许多类型。

这就是你如何制作这个功能:

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