Класс объявлен в h, методы класса определены в cpp. Для того что бы не загромождать, показан только конструктор.
//tree.h
template <class _KeyT> class CTreeItem
{
private:
...
protected:
_KeyT m_Key;
public:
CTreeItem(void);
};
//tree.cpp
template<class _KeyT>
CTreeItem<_KeyT>::CTreeItem(void)
:m_pParent( NULL), m_pLeft( NULL), m_pRight(NULL),
m_Color('b'), m_ulSize(0)
{
}
Вот. Теперь никак не получается использовать, например, вот такой тип
//some.h
typedef CTreeItem<double> CDoubleItem;
так как "Unresolved external CTreeItem<double>:: CTreeItem<double> ...". Можно решить это, добавив в tree.h строки для принудительного инстацирования
//tree.h
template class CTreeItem<double>;
Но только в tree.h. Но если тип будет не стандартный и вообще, нельзя например править tree.h что тогда? Понятно, если вынести определения методов в h, тоже будет компилиться. Но если я не хочу ? Если я вынесу это будет такое месиво определений и методов - а я привык, что все методы в cpp? Так как можно еще управлять инстацированием?