Обычно для моих шаблонных классов я включаю объявления в файл .hpp
и шаблонный код реализации в файл .t.hpp
. Я явно создаю экземпляр класса в .cpp
файле:
template class MyClass< AnotherClass >;
чей объектный код помещается в библиотеку.
Проблема в том, что если я пытаюсь напечатать объект с operator<<
, который объявлен в файле .hpp
и определен в файле .t.hpp
как:
template<class T>
std::ostream& operator<<( std::ostream& os, const MyClass<T>& c)
{
os << "Hello, I am being output.";
return os;
}
Я получаю ошибку компоновщика о том, что правильный символ не определен.
Я понимаю, что это потому, что эта шаблонная функция явно не создается, когда класс. Есть ли способ обойти это, кроме как включить файл .t.hpp
всякий раз, когда я хочу использовать operator<<
в классе, или переместить шаблонный код функции в файл .hpp
? Можно ли явно создать экземпляр кода функции?