3 / 3 / 0
Регистрация: 03.06.2019
Сообщений: 64
|
|
1 | |
Разница между ".inl" и просто ".cpp" файлами17.03.2020, 23:14. Показов 7072. Ответов 5
Метки нет Все метки)
(
Всем привет! Недавно узнал о существовании ".inl" файлов. Как я понял, они используются при реализации inline-функций и/или для реализации функций с шаблонными параметрами. Но до этого я использовал ".cpp" файлы с этой же целью. Так в чем разница между ними, и зачем использовать ".inl", когда можно обойтись и просто ".cpp"?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
17.03.2020, 23:14 | |
Ответы с готовыми решениями:
5
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) |
16488 / 8982 / 2204
Регистрация: 30.01.2014
Сообщений: 15,601
|
|
18.03.2020, 00:10 | 2 |
![]() Решение
NuMeRiC_, нельзя обойтись. cpp-файл - это основа для единицы трансляции, каждая единица трансляции компилируется отдельно, независимо. Это позволяет вынести определения переменных и функций и компилировать их отдельно один раз. А определения шаблонов и inline-функций должны иметь доступное определение в точке использования, отсюда невозможность вынести их в какую-то одну единицу трансляции. Так что я не знаю как вы использовали "до этого" для этих целей cpp, но это явно было возможно, только если файл с использованием ваших шаблонов и inline-функций был только один. Так что inl-файлы это просто еще один вид заголовочных файлов, для "эмуляции" разделения объявления и определения шаблонов и inline-функций, чтобы основной заголовочный файл не загромождался. А вынести их в cpp вы все равно нормально не сможете, просто по определению.
Добавлено через 12 минут Таких умников, которые упорно пытаются выносить шаблоны в cpp тут каждый месяц по 5 штук появляется. Поиском не пользуются, книжки не читают, плодят темы только. Вот, можете полюбопытствовать: Не собирается проект с шаблонным классом: "undefined reference" Undefined reference to Undefined reference при линковке Undefined reference при работе с шаблонным класом Не понятный undefined reference to `unsigned long long f<unsigned long long, void> Undefined reference при использовании шаблонов Работа с шаблонами и ошибка "Undefined reference" Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)'
2
|
Вездепух
![]() ![]() 10426 / 5696 / 1552
Регистрация: 18.10.2014
Сообщений: 14,054
|
|
18.03.2020, 00:17 | 3 |
![]() Решение
Имя файла (и его расширение) не имеет никакого существенного значения. Значение имеет только то, как вы будете использовать этот файл: как самостоятельную единицу трансляции или как хедер, т.е. включаемый (через
#include ) файл. Традиционно расширение .cpp дается самостоятельным единицам трансляции. А расширения .inl , .h или .hpp дается хедерам.Но все это не более чем "джентльменское соглашение". Никто вам не запрещает включать .cpp файлы через #include , если вы понимаете, что делаете. Однако это соглашение частично поддерживается и компиляторами, по каковой причине рекомендуется все таки его придерживаться.Если под " .cpp файлами" вы имеете в виду самостоятельные единицы трансляции, то вы что-то выдумываете: использовать их для определения шаблонов или инлайновых функций вы никак не могли, ибо работать это в общем случае не будет.Необходимости в выделении отдельного класса включаемых файлов .inl обычно нет. Разве что это бывает полезно при реализации инлайновых функций для классов циклически ссылающихся друг на друга. Так что в данном случае вы не столько "узнали о существовании .inl файлов", сколько пронаблюдали чью-то частную и не очень распространенную манеру организации файлов проекта.
0
|
3 / 3 / 0
Регистрация: 03.06.2019
Сообщений: 64
|
|
18.03.2020, 10:55 [ТС] | 4 |
Спасибо! На счет ".срр", я делал все, как было в учебниках, по которых учился. Тойсть в чем дело: там definition(пусть будет так) функций помещалась в .hpp ну или .h. В то же время declaration, сама реализация выносилась в отдельный .срр файл, обычно с таким же именем.
Нигде там я не наблюдал .inl файлов. Так уж сложилось. Теперь буду заново учиться работать с шаблонами функций по-нормальному ![]()
0
|
16488 / 8982 / 2204
Регистрация: 30.01.2014
Сообщений: 15,601
|
|
18.03.2020, 10:59 | 6 |
Это сугубо практическая сторона вопроса.
Что касается того, что при инстанцировании шаблона нужно его определение, то в любом нормальном учебнике про это не быть не могло. Вывод о том, что в таком случае шаблоны должны быть в заголовочном файле (если планируется их использование в множестве cpp) напрашивается сам собой и вы могли его сделать сами, даже без явных слов об этом в учебнике.
0
|
18.03.2020, 10:59 | |
Помогаю со студенческими работами здесь
6
В чем разница между "Порядок выполнения программ на языке C" и "Структура программы на языке C"
Разница между понятиями "Обход в прямом направлении" и "Итерационный прямой обход"
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |