Уменьшите патронный пластин для явных шаблонов в файле .cppC++

Программы на C++. Форум разработчиков
Anonymous
Уменьшите патронный пластин для явных шаблонов в файле .cpp

Сообщение Anonymous »

Чтобы скрыть определение функции шаблона в.

Код: Выделить всё

namespace detail {
struct foo{};

template 
void internalLogic(Model*, foo);

} // namespace detail
и в.

Код: Выделить всё

template void detail::internalLogic();
< /code>
, пока это работает, при добавлении новых моделей и реализации «модели» и внедрение шаблона растет довольно быстро: для 2 функций и 3 моделей 6 линий требуются. И при добавлении новой функции /специальности, действительно легко забыть добавить правильную строку.

, хотя такие ошибки легко обнаружить и исследовать, они делают стоимость < /strong> много времени, если CI потребуется около часа, чтобы создать проект. с: < /p>
// .h
namespace detail {

struct foo{};
struct bar{};

template 
void internalLogic(Model*, foo);

template 
void anotherInternalLogic(Model*, bar);

template 
void instantiateTemplates() {
// just add new function here
(void)std::tuple{
&internalLogic...,
&anotherInternalLogic...,
};
}

} // namespace detail
< /code>
//.cpp

// just add new Models here
template void detail::instantiateTemplates();
< /code>
While this works with MSVC, ld
с GCC и Clang приводит к неопределенному символу .
Какой будет рабочий подход для удаления шаблона при создании специализаций в файле .cpp?

Подробнее здесь: https://stackoverflow.com/questions/795 ... n-cpp-file

Вернуться в «C++»