Объявления явного создания экземпляра шаблона 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;
}

Слишком много Фу, ты не думаешь? Как вы справляетесь с этим?

Извините за мой английский.

ОБНОВИТЬ:

Речь идет не о явных определениях создания экземпляра шаблона или методах настройки самого кода шаблона, а о явном использовании декларации создания экземпляра шаблона и об "адском файле", который создается, если мы пытаемся его использовать.

0 ответов

Другие вопросы по тегам