Wpis z mikrobloga

@jaksa0: Bo jeśli dobrze kumam, to jak zainkluduje je w pliku nagłówkowym, to wymuszę wstępne podłączenie tych bibliotek. W przypadku gdy inkluduje w plikach .cpp, to mogę uniknąć nadmiarowego inkludowania.
  • Odpowiedz
@VanQator: Do nagłówków nie powinno się pchać nic, co nie służy do skompilowania tego nagłówka.
Czyli jeżeli używamy jakiejś innej klasy jako referencje lub wskaźnik to zamiast inkludowania nagłówka dajemy tylko deklarację danej klasy. Często ukrywa się definicję klasy jeżeli jedynie implementuje jakiś interfejs.
Resztę do odpowiedniego pliku cpp, a te często używane najlepiej #!$%@?ć je do prekompilowanego nagłówna.

Chociaż ja już nie mogę się doczekać modułów.
  • Odpowiedz
@lionbest: "Czyli jeżeli używamy jakiejś innej klasy jako referencje lub wskaźnik to zamiast inkludowania nagłówka dajemy tylko deklarację danej klasy." Nie kumam tego. Gdzie tą deklarację dajemy, do nagłówka, czy do pliku źródłowego?
  • Odpowiedz
@VanQator: Przykładowo zamiast:

#include
to często w nagłówku wystarczy samo:

class InnaKlasa;
Natomiast include ląduje w pliku cpp, który zawiera metodę, która korzysta z danej klasy.
  • Odpowiedz
@VanQator: Odpowiedź na twoje pytanie kryję w zrozumieniu procesu kompilacji CPP (w dosyć dużym uproszczeniu to opiszę i tylko to co jest ważne z punktu widzenia pytania) - proces składa się z trzech etapów preprocessing, compilation and linking.
Dla nas najważniejszy jest preprocessing.

W ramach preprocessingu, w każdym pliku źródłowy, wszystkie dyrektywy preprocesora są zastępowane lub obsługiwane w pewien sposób - nas interesuję tylko dyrektywa include - zostaję ona zastąpiona zawartością
  • Odpowiedz
@VanQator: w pliku .hpp powinenes zawierać te includy, które są niezbędne tj. includując dany header w pustym pliku źródłowym powinno się wszystko skompilować. To czy includy powinny includować pełne headery zależności, których używają czy może tylko deklarować forward deklaracje jest umowne i zależy od tego, czy zależy nam na wygodzie, czy czasie kompilacji. Jest to o tyle problematyczne, że przykładowo forward deklaracja dla typów szablonowych jest dość nieciekawa, więc jeżeli masz
  • Odpowiedz