Мы обнаружили, что шаблон может значительно увеличить время компиляции и ссылки.Одна из проблем заключается в том, что каждый файл, содержащий заголовок, объявляющий шаблон, должен будет проанализировать его, проверить его действительность, и, если он используется модулем компиляции, сгенерированный объектный файл будет содержать код, который впоследствии будет удаленкомпоновщик (если используется более чем одним файлом).
В нашем проекте у нас был какой-то большой шаблон, который был включен почти в каждый файл, но из которых когда-либо существовало только два экземпляра.Мы значительно улучшили время компиляции, используя явное создание экземпляров и разделение кода шаблона на несколько файлов.
Для вашего примера это даст вам:
// MyClass.h
template < typename T >
class MyClass
{
void Print();
T m_tValue;
}
// MyClass.inl
#ifdef MY_CLASS_METHODS_ARE_NOT_INLINE
# define MY_CLASS_INLINE
#else
# define MY_CLASS_INLINE inline
#endif
template < typename T >
MY_CLASS_INLINE void MyClass< T >::Print()
{
std::cout << m_tValue << std::endl;
}
#undef MY_CLASS_INLINE
// MyClass.cpp
#include "MyClass.h"
#define MY_CLASS_METHODS_ARE_NOT_INLINE
#include "MyClass.inl"
template class MyClass< int >;
template void MyClass< int >::Print();
#undef MY_CLASS_METHODS_ARE_NOT_INLINE