Wpis z mikrobloga

#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?
  • 18
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@xmichaelx: nie wiem co Ci koledzy piszą wcześniej, ale z żadną z tych odpowiedzi nie zgodziłbym się w pełni..

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
  • Odpowiedz
@AferaZaAfera: @xmichaelx: Świetna odpowiedź ale brakuje jeszcze jednej rzeczy.
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
  • Odpowiedz
@AferaZaAfera: takie tłumaczenie to zwykłe lanie wody.

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ę
  • Odpowiedz
@piotrb: co mają partial classes do h/cpp? Wydaje mi się, że (jedyne?) sensowne zastosowanie dla partial classes to ukrywanie/oddzielenie kodu wygenerowanego automatycznie od napisanego ręcznie.

@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
  • Odpowiedz
Wydaje mi się, że (jedyne?) sensowne zastosowanie dla partial classes to ukrywanie/oddzielenie kodu wygenerowanego automatycznie od napisanego ręcznie.


@sasik520: Masz rację, wydaje Ci się.
  • Odpowiedz
@sasik520: Konkretny przykład dotyczy właśnie czasu kompilacji, ta część która się nie zmieniła, nie musi być kompilowana ponownie, a o tym była dyskusja. Jeżeli międzymordzie klasy się nie zmieni, to nie ma potrzeby rekompilacji niczego poza faktycznie zmienionym fragmentem. IMHO motywacje wprowadzenia były 2: pierwsza to faktycznie oddzielenie kodu generowanego, a druga to usprawnienie procesu kompilacji.
  • Odpowiedz