Sono un programmatore C++ e di recente mi sono unito a una nuova società che utilizza molto C. Quando hanno esaminato il mio codice, pensavano che avessi sovrascritto alcune delle cose che non ero affatto d'accordo. La società sta facendo tutto nel sistema embedded, quindi il mio codice deve essere efficiente nella memoria , ma le cose che sto facendo non sono ad alta intensità di CPU. Mi piacerebbe sapere come voi ragazzi pensate quale sia il mio design. Ecco la lista.
Quando ho creato le mie classi di helper, ho finito la progettazione?
devo alcuni array che devono passare intorno e alla fine hanno bisogno di passare a qualche codice C. Potevo passare un puntatore e una dimensione dappertutto. Ma ho scelto di creare una classe che rappresenti questo - una classe che ha un buffer di dimensione fissa (sappiamo la dimensione massima) e una lunghezza che dovrebbe essere sempre < = la dimensione del buffer, altrimenti asserire. In questo modo, posso passare l'array in giro con una sola variabile anziché due, e se la dimensione massima cambia in futuro, dovrei essere in grado di cambiarla facilmente. Non utilizzo l'allocazione dinamica per l'array perché è un sistema incorporato e l'allocazione della memoria potrebbe potenzialmente fallire e non usiamo eccezioni. La classe è probabilmente con meno di 30 righe di codice e io la uso per un bel po 'di posti. Hanno detto che l'ho sovrascritto.
Hanno implementato i propri contenitori in C. Avevo bisogno di usarne uno, ma volevo nascondere tutto il codice dettagliato lontano dalla mia logica principale, così ho creato una classe wrapper per questo. La classe wrapper è simile a stl, quindi ho iteratori e gestisce internamente l'allocazione della memoria , ma a differenza di stl, restituisce un codice di errore quando non può allocare più memoria . Il loro argomento su questo è che io sono l'unico ad usarlo, quindi non vogliono che sia nel repository. Ho trovato stupido ad essere onesto.
EDIT: La classe seguente è più o meno quello che ho usato per il punto 1. Tutto quello che volevo fare è avere qualcosa da passare intorno senza portare la durata per tutto il tempo.
class A
{
static const MAX_SIZE = 20;
int m_Array[MAX_SIZE];
size_t m_Len;
public:
A(const int* array, size_t len)
{
assert(len <= MAX_SIZE);
memcpy(m_Array, array, len);
m_Len = len;
}
size_t GetLen() const { return m_Len; }
const int* GetArray() const { return m_Array; }
};
Ho inserito un codice di esempio nella modifica. – leiz