2014-09-08 13 views
8

Nel mio design ho una classe che è principalmente un fronte per un std::vector<OtherClass>. Devo, nella mia interfaccia di classe, consegnare a qualsiasi chiamante uno std::iterator, consegnare un riferimento all'intero vector o fornire un set di funzioni per accedere ai contenuti del mio vector? O ci si avvicina in modo diverso?La mia classe è principalmente un fronte per un contenitore, dovrei esporre questo fatto?

Ulteriori informazioni: Gli elementi nel contenitore verranno impostati durante l'inizializzazione e non verranno aggiunti quando il programma è in esecuzione normalmente. I client della mia classe spesso eseguono query e modificano lo stato degli elementi OtherClass, anche se non in modo critico.

+0

Considerare l'utilizzo di funzioni libere che accettano 'std :: vector' anziché i membri di una classe wrapper. – erenon

+3

Questo è molto specifico per l'applicazione. Gli iteratori potrebbero funzionare, ma cosa succede se si aggiunge costantemente al vettore? Gli iteratori verrebbero invalidati quando il vettore si rialloca. Dacci più informazioni, per favore! – Conduit

+0

Se 'OtherClass' è costante, perché non specializzarsi? – Nelfeal

risposta

1

È necessario creare le funzioni per modificare internamente il vettore. Ecco perché:

A seconda del compilatore, potrebbero essere in esecuzione versioni diverse di STL (Standard Template Library), che possono causare problemi imprevisti, ipoteticamente potrebbero cambiare il modo in cui std :: vector opera da quando lo si genera in un versione più vecchia (o più recente) della libreria e inviarla via.

Tuttavia, suppongo che questa non sia una libreria o un progetto potenzialmente utilizzato con un altro compilatore. È possibile inviare un riferimento o un puntatore al vettore finché non si esegue e si compila con la stessa versione di STL.

Problemi correlati