Size: a a a

IT KPI C/C++ ХВ (не UB)

2021 July 08

AB

Aleksey Belkevich in IT KPI C/C++ ХВ (не UB)
Хотя дизайн выглядит странно
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
Та это шаблоны странные - вот такая проблема...
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
Переслано от  ‌‌Gleb Pilipets...
А как бороться с шаблонами?

У меня есть шаблонный метод, который зависит от других шаблонов.
Если я в хедере напишу имплементацию этого шаблонного метода, то он не будет работать, если инклудить в несколько .cpp без пачки доп зависимостей - я хочу эти зависимости компилить только один раз, а не каждый раз...

Если же я в .cpp пропишу имплементацию шаблонного метода, то есть в хедере будет просто декларация, а потом сделаю explicit instantiation, то всё работает, как и ожидается.
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
Переслано от  ‌‌Gleb Pilipets...
Ну я не хочу компилировать в каждом .cpp одни и те же темплейты
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
Переслано от  ‌‌Gleb Pilipets...
то есть проблема в том, что если я напишу условно

template<class T>
void method(...) { ... } в хедере, то при инклуде в каждый .cpp мне нужно тянуть все зависимости шаблонные этого метода в этот же .cpp.

В то же время, если я напишу определение только в одном .cpp и подтяну все зависимости туда, а в хедере оставлю template<class T>
void method(...), то достаточно будет инклудить только хедер с декларациями, что более эффективно.

Но тогда не понятно, как клиентам использовать method со своими типами, так как они видят только декларацию в хедере и не могут инстанциировать такой метод со своими типами.
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
Переслано от  ‌‌Gleb Pilipets...
Пока что я разделил как-то так.

#include <my_utils/header_*.hpp> - здесь шаблонные декларации
#include <my_utils/header_*/impl.hpp> - здесь шаблонные реализации

Тогда клиент будет инклудить себе только хедер, когда нужно просто использовать, а при необходимости impl.hpp, когда нужно переопределить поведение на своих типах, но не знаю, насколько это правильно.
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
Переслано от Alexander Zaitsev
а другого не дано - терпи и страдай. А как там это решено в модулях, кстати?
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
Переслано от Alexander Zaitsev
была ещё такая штука как extern template :)
источник

AB

Aleksey Belkevich in IT KPI C/C++ ХВ (не UB)
А, ну это вечная проблема
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
Вроде, extern template это решение, но хз, что лучше...
источник

W

Wpakk in IT KPI C/C++ ХВ (не UB)
ребят, я новичок, можете пожалуйста подсказать, как можно вывести символ ascii по его номеру?
источник

KS

Kyryl Sydorov in IT KPI C/C++ ХВ (не UB)
char c = 123;
cout << c
источник

W

Wpakk in IT KPI C/C++ ХВ (не UB)
там на тестах ошибку выдаёт
источник

W

Wpakk in IT KPI C/C++ ХВ (не UB)
оно первое число только выводит
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
скинь тесты
источник

W

Wpakk in IT KPI C/C++ ХВ (не UB)
там все 95 символов от 32 до 126 он прогоняет
источник

W

Wpakk in IT KPI C/C++ ХВ (не UB)
я ввожу любое число, оно выдаёт его первую цифру и все
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
эм
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
скинь участок кода какой-то - ты что-то не так делаешь
источник

W

Wpakk in IT KPI C/C++ ХВ (не UB)
char c;
cin >> c;
cout << (char)c << endl;
источник