boiler ha scritto:Insomma, sto cercando di ottenere l'architettura a sinistra (che mi sembra pulita) e mi vedo quasi-costretto a realizzare quella a destra (che nel contesto delle classi in C++ mi sembra equivalete al "mettere tutto in variabili globali" in C).
Nessuna delle due architetture esiste. Non confondere il modo in cui includi i files con le dipendenze che definisci fra classi od altre entità.
Le dipendenze fra files sono gestite dal preprocessore, nemmeno dal C++. Il linguaggio in se non ha idea di cosa sia un file.
Fondamentalmente con le direttive #include stai solo dicendo come copiare ed incollare files insieme in un unico grosso da passare al compilatore. Quindi tutti i file finiscono per essere un'ammasso globale, che tu lo voglia o no; non funziona come in altri linguaggi quali js con moduli es o java.
Il modo corretto per approcciare il problema a livello di preprocessore è di inserire guards or #pragma once per ogni file header, in modo da evitare istanze ripetute nel processo di copy and paste. Per il resto includi quello che devi includere dove serve.
Lascia il problema delle dipendenze e la loro pulizia ai namespace, moduli (se usi c++ abbastanza recente) e gerarchia di classi :). In C++ è totalmente normale includere lo stesso file in più punti e non è considerato un problema in linea di principio se i suoi simboli sono usati.