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

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

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

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

extern template class Type<int>;

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

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

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

17 ответов

21 просмотр

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

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

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

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

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

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

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

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

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

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

d7d1cd
У меня один хедер

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

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".

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта