Объявления явного создания экземпляра шаблона C++: лучшие практики
Мой вопрос заключается в том, как мы должны правильно использовать объявления явных экземпляров шаблона?
Предположим, у нас есть некоторый шаблонный класс template<class T> Foo
,
Вот мой разум, как бороться с этой функцией:
Мы помещаем шаблон объявления в Foo.h
файл, реализация в Foo.inl
файл, включите это Foo.inl
в конце Foo.h
файл, положить extern template class Foo<int>;
после #include "Foo.inl"
, Также мы должны использовать явное определение экземпляра шаблона, например, в Foo.cpp
файл (конечно, мы должны также включить Foo.h
в этом файле cpp).
Если мы сделаем все это, мы получим ошибку: мы не сможем использовать явное определение экземпляра шаблона сразу после явного объявления экземпляра шаблона. Хорошо, давайте поместим объявление шаблона и #include "Foo.inl"
в отдельном файле Foo.hpp
и включить его в Foo.cpp
, В конце концов мы получили это:
Foo.hpp
template<class T>
class Foo
{
public:
Foo();
...
};
#include "Foo.inl"
Foo.inl
template<class T>
Foo<T>::Foo() {}
foo.h
#include "Foo.hpp"
extern template class Foo<int>;
foo.cpp
#include "Foo.hpp"
template class Foo<int>;
И использовать этот шаблон Ike это:
test1.cpp
#include "Foo.h"
void bar()
{
Foo f;
}
Слишком много Фу, ты не думаешь? Как вы справляетесь с этим?
Извините за мой английский.
ОБНОВИТЬ:
Речь идет не о явных определениях создания экземпляра шаблона или методах настройки самого кода шаблона, а о явном использовании декларации создания экземпляра шаблона и об "адском файле", который создается, если мы пытаемся его использовать.