Size: a a a

2021 July 08

AZ

Alexander Zaitsev in supapro.cxx
я всё же рекмендую идти в оффтопик
источник

 P

 ‌‌Gleb Pilipets... in supapro.cxx
А как бороться с шаблонами?

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

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

AZ

Alexander Zaitsev in supapro.cxx
я пока что не понял, какая именно у тебя борьба то
источник

 P

 ‌‌Gleb Pilipets... in supapro.cxx
Ну я не хочу компилировать в каждом .cpp одни и те же темплейты
источник

 P

 ‌‌Gleb Pilipets... in supapro.cxx
то есть проблема в том, что если я напишу условно

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

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

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

C

CodeDetector in supapro.cxx
Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
источник

 P

 ‌‌Gleb Pilipets... in supapro.cxx
Пока что я разделил как-то так.

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

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

AZ

Alexander Zaitsev in supapro.cxx
а другого не дано - терпи и страдай. А как там это решено в модулях, кстати?
источник

 P

 ‌‌Gleb Pilipets... in supapro.cxx
То есть это стандартная практика, когда так разделяют?
Просто нигде не читал о таком...
источник

AZ

Alexander Zaitsev in supapro.cxx
была ещё такая штука как extern template :)
источник

 P

 ‌‌Gleb Pilipets... in supapro.cxx
Хм, о таком не слышал - видимо, то что нужно.
Спасибо
источник

 P

 ‌‌Gleb Pilipets... in supapro.cxx
ну да, это как раз для этого )

А что лучше - разделять на шаблонный хедер и шаблонную реализацию, которую нужно инклудить клиенту при инстанциировании шаблонов или extern template?
источник

AZ

Alexander Zaitsev in supapro.cxx
если честно - я не знаю принятых практик на сей счёт. я лично никогда не разделяю и пишу всё в хедере. Да, меня не парит время компиляции пока что
источник

 P

 ‌‌Gleb Pilipets... in supapro.cxx
так а дело же разве во времени компиляции?

там же лишний код компилится в сорсах или нет?
То есть если инстанциировать несколько раз в разных .cpp, то я думал, что это увеличит размер скомпиленного файла, разве нет?
источник

AZ

Alexander Zaitsev in supapro.cxx
да вроде как не должен
источник

AB

Aleksei Budyakov in supapro.cxx
В Eigen так сделано. У них шаблонные классы предкомпилированы для базовых типов, а хочешь свои, делай дефайн который подключает имплементации
источник

 P

 ‌‌Gleb Pilipets... in supapro.cxx
Найс, спасибо.
источник

ip

illya palkin in supapro.cxx
Да скиньте вы уже свой гх, мы все очень хотим посмотреть на ваш продуманный на 100 шагов вперёд и оттестированный на все код
источник

AD

Aleksandr Dorokhin in supapro.cxx
Всем привет
Пытаюсь написать эмуляцию управления курсором мыши через геймпад в linux

https://github.com/hitman249/robotjs/blob/MouseLinuxGames/src/mouse.c#L124

Использую для этого XWarpPointer, всё вроде бы хорошо но возникла проблема.
В играх при повороте камеры я упираюсь в "стену" по краям
источник

АВ

Александр Водянников... in supapro.cxx
Чего ?
источник