或者只是实际使用通用零件的那些?
就像这个例子一样:
template<class T>
class foo
{
public:
void addStuff(int x,T y)
{
ints_.push_back(x);
generics_.push_back(y);
}
void clear()
{
ints_.clear();
generics_.clear();
}
void setName(std::string name)
{
name_ = name;
}
std::string name_;
std::vector<int> ints_;
std::vector<T> generics_;
};
非泛型函数是内联函数,因为将它们放在.cpp文件中需要专门化。 他们也复制了吗? 好奇......
答案 0 :(得分:4)
通过模板参数创建的每个类都是它自己的类。也就是说,如果您有foo<int>
,foo<double>
和foo<char>
,则会存在3种不同的addStuff,clear和setName函数。那是因为会有3个不同的类。模板是编译时实体。它们是在编译过程中引入的,并没有像这样“减少”代码大小。
答案 1 :(得分:3)
从技术上讲,是的,因为它们是属于不同类的不同函数。实际上,也许,因为编译器/链接器非常聪明,并且已经发现在许多情况下可以压缩这样重复的代码。而且总是有可能它们没有被完全内联,因此根本不需要存储实际的功能。
使用模板技巧的可执行文件大小有一定的成本,但它现在不像过去几年那么多。