Cosa dovrebbe essere in un PIMPLE?

0

Sto cercando di implementare una libreria di finestre in C ++, le circostanze mi stanno costringendo a implementarlo tutto da solo, ma non è questo il punto di questa domanda.

La mia domanda è: cosa dovrebbe essere in una classe PIMPL ? Quali attributi, per essere più precisi. Ad esempio, come ho già affermato, sto implementando una libreria di finestre e ho 2 attributi di tipo:

  • Questi, che descrivono la finestra (int Width, char * pTitle ect.)
  • E quelli che sono necessari al sistema operativo (HWND, HDC, HGLRC per Windows o XEvent, Display, Window per Linux / X11).

Il mio attuale approccio è che l'implementazione contiene tutti gli attributi, la classe sopra, che ha il PIMPL, chiama i metodi getter e setter dell'implementazione per recuperarne gli attributi.

Qual è l'approccio giusto? Metti tutti in una (PIMPL-) classe o li dividi?

    
posta LaVolpe 20.10.2014 - 18:27
fonte

1 risposta

4

Lo scopo dell'idioma PIMPL è quello di fornire una separazione di livello più basso tra l'interfaccia e l'implementazione * in modo da poter modificare l'implementazione senza influire sull'interfaccia. In particolare, ciò significa che la libreria può mantenere la compatibilità binaria , consentendo agli utenti di collegarsi a una nuova versione della libreria senza ricompilare i loro eseguibili.

Ciò che accade nella classe PIMPL dipende interamente da ciò che ritieni possa cambiare o meno (e anche se la compatibilità binaria è importante per te).

  • Se hai una variabile membro estremamente essenziale per la classe e non puoi mai cambiare senza una riprogettazione importante della libreria, dovresti lasciarla nell'intestazione per salvarti dalla complessità aggiuntiva (e prestazioni minori costo).

  • D'altro canto, se vuoi massimizzare la flessibilità e la compatibilità devi nasconderlo il più possibile nella classe PIMPL.

risposta data 20.10.2014 - 20:45
fonte