170 похожих чатов

Есть такой хедер: template <typename T> class Type {

/* тут только объявления методов */
};

// Сюда вынесены все реализации методов шаблона

extern template class Type<int>;

Этот хедер включен в несколько TU, шаблон в каждой из них инстанцируется типом int. В одной из TU прописано:
template class Type<int>;

Все это работает как надо: только в одной TU шаблон инстанцируется, во всех остальных компилятор "верит", что где-то есть инстанцирование. Линкер все успешно собирает.

Но буду ли я прав, что при компиляции каждой TU компилятор проверяет на корректность реализацию методов? То есть, по сути, он в каждой TU выполняет одну и ту же работу?

17 ответов

6 просмотров

А у тебя это все в хедере?

d7d1cd- Автор вопроса
Слава
А у тебя это все в хедере?

Да. Хедер включен в разные TU

d7d1cd
Да. Хедер включен в разные TU

Ну будет выполнять одну и ту же работу. Хотя я не уверен. Должен ли линкер ругаться на то что символы несколько раз определены 🧐

d7d1cd- Автор вопроса
Слава
Ну будет выполнять одну и ту же работу. Хотя я не ...

Они не определены несколько раз. Там же есть extern template

d7d1cd
Они не определены несколько раз. Там же есть exter...

Ну это же явное инстанцирование шаблона

Из сообщения я так понял что у тебя в каждом хедере есть реализации методов. Потом ты спрашиваешь, > компилятор проверяет на корректность реализации методов Ну, у него в TU каждом есть реализация. Не понял вопрос, короче.

d7d1cd- Автор вопроса
d7d1cd
У меня один хедер

Ну он же инклюдится в каждый TU

d7d1cd- Автор вопроса
d7d1cd
Верно

И че там проверять?

В любом случае даже если он делает некую "двойную работу", кому не насрать на время компиляции? Там и так этих шаблонов наворотили что может комилироваться десять лет, зато работает в рантайме быстро!

d7d1cd- Автор вопроса
Vladimir
В любом случае даже если он делает некую "двойную ...

Мне не насрать. Потому что ждать каждый раз по 3 минуты задолбало.

d7d1cd
Мне не насрать. Потому что ждать каждый раз по 3 м...

Может быть у тебя горлышко в другом месте каком-то?

А что значит extern template class Type<int>; ? Я хочу, чтоб ты, компилятор, знал, что Type - это некий шаблон класса с шаблонным параметром типа , заданным в int. Зачем тут extern ?

Ilya Zviagin
А что значит extern template class Type<int>; ?...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

d7d1cd- Автор вопроса
Ilya Zviagin
А что значит extern template class Type<int>; ?...

Для того, чтобы сказать компилятору: "Не инстанцируй этот шаблон типом int. Я тебе атвичаю, инстанцирование есть в другой TU".

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
53
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
16
или вы считаете муит дает знание?
супер_лох_3000 альфа версия
12
А кто такой мужчина в твоем понимании Азиз?
who?です 🐈
11
Ну значит тебе повезло, мы же про транк говорим оба?
Александр (Rouse_) Багель
11
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем ку. Подскажите, если задекларировал массив так: int arr[10] = {1, 2, 3, 4}, то в arr[4] будет мусор или нуль?
Sasha K
14
буквально один оставшийся вопрос при выполнении строчки mov eax, 5 операнд "5" будет присутствовать где-либо в памяти (любой), кроме как в памяти блока .code? подвопрос: как...
12
Карта сайта