Per "shodan":
ho implementato la seconda soluzione, quella in cui uso una classe base (l'avevo già prevista).
Il codice che ho sviluppato è il seguente:
File header:
codice:
.
.
.
friend std::ostream& operator<<(std::ostream&, const ComponentBase&);
friend std::istream& operator>>(std::istream&, ComponentBase&);
.
.
.
File cpp
codice:
.
.
.
std::ostream& operator<<(std::ostream& os, const ComponentBase& comp)
{
//TODO
return os;
}
std::istream& operator>>(std::istream& is, ComponentBase& comp)
{
//TODO
return is;
}
.
.
.
Ora se non mi sbaglio, nell'implementazione della funzione che esegue l'overload degli operatori, dovrei andare a scrivere una funzione "virtuale" (magari pura) che sarà poi implementata nelle classi derivate e che caratterizza il comportamento dei singoli componenti giusto? (un po come mi hai suggerito tu con
codice:
os << comp.get_internal_data();
).
Per "Ippo343": il campionamento non è del circuito ma di una grandezza fisica di ingresso. Per esempio, supponiamo di avere un file di testo dove all'interno ci sono "n" valori che rappresentano un segnale campionato e sottoposto a conversione A/D per un certo periodo di tempo.
Se utilizzo il tuo metodo, ad ogni valore letto dal file dovrei chiamare in cascata tutte le funzioni che rappresentano ogni singolo componente per avere alla fine un valore di uscita.
Se invece utilizzo il metodo che suggerisco io, potresti leggere tutto il file, depositarlo in un vettore e far processare i dati via via un componente alla volta. Ci sarà una latenza tra l'inizio e la fine ma è una cosa accettabile.
Tutti i dispositivi di elaborazione di segnali digitali lavorano in più o meno in questo modo.