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

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

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

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

extern template class Type<int>;

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

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

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

17 ответов

17 просмотров

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

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта