Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
#1

Раздельная компиляция шаблонов классов

08.03.2017, 17:13. Просмотров 284. Ответов 7
Метки нет (Все метки)

При разделении шаблона класса на .h и .cpp линковщик ругается. Неужели в C++17 ещё не пофиксили это недоразумение и придётся писать всё в одном файле?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2017, 17:13
Ответы с готовыми решениями:

Экспорт шаблонов функций/методов и раздельная компиляция
Возможен ли он в настоящее время? Если да, то как грамотно реализовать? Если...

Создание классов в С++. Раздельная компиляция
При создании класса C++ в VS создается два файла, "<имя_класса>.h" и...

Раздельная модель компиляции шаблонов
Иншаллах, парни. В одной книжке (имя которой я сказать не могу) идет речь о...

раздельная компиляция
Вот есть три файла: заголовочный файл с классом (.h), файл с реализацией...

Раздельная компиляция
Пусть есть программа, которая состоит из 2 файлов. 1 файл: основной, там где...

7
zss
Модератор
Эксперт С++
7102 / 6630 / 4199
Регистрация: 18.12.2011
Сообщений: 17,486
Завершенные тесты: 1
08.03.2017, 18:21 #2
а как Вы себе это представляете?
из шаблона нельзя сгенерировать код до тех пор. пока нет его инстанцирования.
1
GbaLog-
Любитель чаепитий
3164 / 1470 / 465
Регистрация: 24.08.2014
Сообщений: 5,200
Записей в блоге: 1
Завершенные тесты: 2
08.03.2017, 18:35 #3
http://www.cyberforum.ru/post9488987.html

А вообще, можно разделить, но просто придется по другому инклудить:
C++
1
2
3
4
5
//foo.hpp
template<typename Tp>
void foo(Tp);
 
#include "foo.tcc"
C++
1
2
3
4
//foo.tcc
template<typename Tp>
void foo(Tp)
{}
C++
1
2
3
4
5
6
7
//main.cpp
#include "foo.hpp"
 
int main()
{
  foo(1); 
}
Цитата Сообщение от DevAlone Посмотреть сообщение
Неужели в C++17 ещё не пофиксили это недоразумение
Нет.
1
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,042
08.03.2017, 18:47 #4
Или так (чтобы уж совсем отдельно):
C++
1
2
3
4
5
6
//main.cpp
#include "foo.hpp"
#include "foo.tcc"
 
int main()
{ foo(1); }
Или так:
C++
1
2
3
4
5
6
7
//main.cpp
#include "foo.hpp"
 
int main()
{ foo(1); }
 
#include "foo.tcc"
Но как ни крути, всё равно всё должно быть в одной единице трансляции, т.е., раздельной компиляцией это не назовёшь.
1
hoggy
Нарушитель
Эксперт С++
7054 / 3100 / 643
Регистрация: 15.11.2014
Сообщений: 7,062
Завершенные тесты: 1
09.03.2017, 01:44 #5
Цитата Сообщение от DevAlone Посмотреть сообщение
Неужели в C++17 ещё не пофиксили это недоразумение
фиксят ошибки.
в данном случае никаких недоразумений нет.

Цитата Сообщение от DevAlone Посмотреть сообщение
придётся писать всё в одном файле?
если хотите предоставить клиентам шаблон - да.
1
rikimaru2013
C++ Game Dev
2472 / 1141 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
09.03.2017, 01:51 #6
DevAlone, так в той крутой ссылке есть пример крутой фичи в .h определить функции
C++
1
2
3
4
5
6
void FooTemplateTrick()
{
 Foo<int>();
 Foo<char>();
 Foo<float>();
}
1
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
09.03.2017, 01:55  [ТС] #7
такой себе способ, а вдруг надо будет ещё что-то? Не генерить же тонну определений?)
0
rikimaru2013
C++ Game Dev
2472 / 1141 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
09.03.2017, 02:08 #8
DevAlone, ну эта крутая фича с функцией-фейком в .h не пройдет код-ревью) Это так - если очень хочется!
1
09.03.2017, 02:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2017, 02:08

Раздельная компиляция
Здравствуйте, я перечитал на форуме информацию по этой теме, но пока что не...

Раздельная компиляция
В Гугле не забанен,нашел описание самого принципа,но конкретных примеров не...

Раздельная компиляция и шаблоны
Есть 3 файла с кодом: 1) foo.hpp template&lt;typename T&gt; class foo { public:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru