Вечный вопрос о том, как мне определить мои шаблоны классов.Шаблон на самом деле не код, это шаблон, который вы используете для определения кода позже.Итак, есть два возможных решения: если вы знаете, что вы собираетесь использовать только определенные типы Poly
, вы можете определить их в файле .cpp.
#include "poly2.h"
Poly<int>;
template<class T>
Poly<T>::Poly() {
}
Или вы можетепоместите все определения и объявления шаблона в ваш заголовочный файл.Мне нравится создавать отдельный файл .hpp и помещать туда определения.Итак, я бы сделал это:
poly2.h
template <class T>
class Poly {
public:
Poly();
};
#include "poly2-impl.hpp"
poly2-impl.hpp
template<class T>
Poly<T>::Poly() {
}
И в шаблонах важно то, что вы можете включить заголовокфайл в нескольких файлах перевода без ранее определенных ошибок.
Дополнительную информацию см. здесь: http://www.parashift.com/c++-faq-lite/templates.html#faq-35.12