#programowanie #cpp
https://github.com/CRYTEK-CRYENGINE/CRYENGINE/tree/release/Code/CryEngine/CryCommon/CryMath
Mirki, goście tutaj widzę pakują implementacje funkcji do plików .h, miejscami tylko robią costam.h i costamImpl.h. Jak parę lat temu uczyłem się c++ to zawsze dzieliło się na pliki h i cpp. To co oni stosują tutaj to jakaś znana w świecie c++ konwencja?
https://github.com/CRYTEK-CRYENGINE/CRYENGINE/tree/release/Code/CryEngine/CryCommon/CryMath
Mirki, goście tutaj widzę pakują implementacje funkcji do plików .h, miejscami tylko robią costam.h i costamImpl.h. Jak parę lat temu uczyłem się c++ to zawsze dzieliło się na pliki h i cpp. To co oni stosują tutaj to jakaś znana w świecie c++ konwencja?
- Najlepsze
- Wszystkie komentarze







1. Po co dzielimy na .h (/ .hpp) i .cpp?
Po to, że *include-ując* za każdym razem cały kod (nagłówki + implementacja), czas kompilacji byłby bardzo długi i jeśli zmienił byś coś w implementacji a nie nagłówku/API klasy/struktury/funkcji, to ta klasa jak i zależne od niej musiały by zostać przebudowane od nowa. Gdy
Według tej odpowiedzi na Stack Overflow czasami można, ale trzeba wiedzieć co się robi.
Pamiętajcie, że CryEngine dopiero od niedawna jest open-source. Czasami plik nagłówkowy zdradza zbyt dużo na temat implementacji klasy, szczegóły, które chcemy ukryć. Wtedy stosuje się tzw. PIMPL idiom, czyli ukrywanie implementacji w oddzielnej strukturze. Możliwe, że to nie zostało jeszcze zmienione albo nawet nikt nie ma zamiaru tego zmieniać, pomimo tego, że projekt jest już open-source i nie ma
Czas kompilacji? Przebudowywanie od nowa? C#, java i multum innych języków jakoś sobie świetnie radzi bez tego poronionego pomyslu. Są tez precompiled headers, które może nie są remedium na wszelkie zło, ale złe też nie są.
Nawet w przypadku template'ów są extern template'y i dopóki nie piszesz biblioteki, sa fajne.
Optymalizacje - j.w. W przypadku biblioteki zgoda, w przypadku własnego kodu - lepiej zdać się
Komentarz usunięty przez autora
A w wypadku templatów to jest to właściwie niezbędne
@sasik520: I dlatego do C# wprowadzono partial classes?
@AferaZaAfera: srutututu srutututu. W takim stanie, jak teraz, to pewnie, z c++ h/cpp się nie usunie. Ale język powinien do tego dążyć, moim zdaniem. I dlaczego niby porównanie do c# czy innego języka jest złe? C++ od samego początku czerpie całymi garściami z
@sasik520: Masz rację, wydaje Ci się.