Эксирование и использование шаблона файла перекрестного исходного файла
-
26-09-2019 - |
Вопрос
У меня есть класс с несколькими функциями шаблонов, которые я хотел бы распространить среди нескольких исходных файлов для ускорения времени компиляции. (Шаблоны являются деталями реализации и не предназначены для использования за пределами класса, поэтому их определение в источниках не заголовки.)
Как бы я пошел о расщеплении этих шаблонов таким образом, что я не получу ошибки линейки? Если у меня есть исходный файл A, используя шаблон, определенный в исходном файле b, как мне убедиться, что соответствующий экземпляр шаблона создан компилятором?
Решение
Я не мог ответить на это лучше, чем FAQ C ++:
https://isocpp.org/wiki/faq/templates#Templates-defn-vs-decl.
Другие советы
Просто не объявляйте эти элементы шаблона как часть класса в заголовочном файле. Затем определите свои шаблоны только в исходном файле. Например:
Myclass.hpp.
class MyClass
{
public:
void SomePublicMethod() const;
};
Myclass.cpp.
template<class T>
void SomethingWithT(T myVal)
{
// ...
}
void MyClass::SomePublicMethod() const
{
SomethingWithT(42);
}