normalde template'ler declare edildikleri dosyalarda foksiyonlarini olusturuyor.
Ornek olarak a.cpp dosyasinda tree<int> declare edildiginde a.o ya tree nin foksiyonlari derleniyor.
Bu durum birden cok .cpp dosyali buyuk projelerde tree classini kullanan her .o dosyasi icin foksiyonlari ayri derlemek mantikli degil
tree.h
template<typename T>
class tree : public tree_b{
tree_b* clone_f();
void copy_f(tree_b *const);
public:
T *data;
tree(){data=new T;};
~tree(){delete data;};
tree(T &a){data=new T; *data=a;};
void data_string(string &s){s=to_string(*data);};
};
tree.cpp
#include "tree.h"
template class tree<int>;
template class tree<double>;
template class tree<string>;
template class tree<onerme_node>;
onerme.cpp
#include "tree.h"
extern template class list<tree_b*>;
extern template class tree<onerme_node>;
test.cpp
#include "tree.h"
extern template class tree<onerme_node>;
yukardaki yapi ile onerme.cpp i derleyen complier, onerme.cpp da kullanilar tree foksiyonlarini onerme.o da olusturmaz. Ve tree.cpp da declare edilen degisik turlerdeki tree foksiyonlarini tree.o da olusturur. sonra linker onerme.o, test.o daki foksiyonlar cagrilarini tree.o daki tree foksiyonlarina baglar.