Разъясните механизм template в С++
Итак, умных книжек сейчас под рукой нет, где можно было бы сию инфу надыбать, так что спрашиваю тут.
Во-первых, если у меня в двух файлах A.cc и B.cc есть объявления (реализации) классов типа такого
class A{
private:
int n;
public:
A():n(0){}
A(int N):n(N){}
// можно еще какую-нибудь фигню приписать
};
тогда линковшик начнет ругаться, что, в принципе, и понятно.
С template-ами ситуация совсем иная. Отправить объявление типа:
template<class T>
class A{
private:
T n;
public:
A():n(0){}
A(T N):n(N){}
// можно еще какую-нибудь фигню приписать
};
в два различных файла, и там и там сделать A<int> -- и все будет прекрасно работать.
Соответственно, вопрос в том, а как оно так сделано?