Уменьшите патронный пластин для явных шаблонов в файле .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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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