有人可以用简单的格式解释这个吗?
有模板函数和模板类。有哪些优点和缺点?我听说模板构建起来很慢,甚至在运行时也是如此?
真?
THX
答案 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);