Nascondere membri di dati privati? (C ++)
Domanda
Esiste un modo per nascondere i membri di dati privati ??di una classe C ++ ai suoi utenti, nel file cpp? Penso ai membri privati ??come parte dell'implementazione e sembra un po 'arretrato dichiararli nel file di intestazione.
Soluzione
Il " pimpl " idioma è come questo è generalmente gestito.
Vedere
- http://www.gotw.ca/gotw/024.htm
- http://www.gotw.ca/gotw/028.htm
- http://herbsutter.com/gotw/_100/ (aggiornato per C ++ 11 )
Altri suggerimenti
vuoi usare qualcosa di simile al linguaggio PIMPL
Vedi Idioma Pimpl
Il modo classico per farlo è con un puntatore proxy a una classe interna che implementa la funzionalità. Non c'è modo di definire definizioni di classe parziali in C ++ che conosco.
Stai andando commerciale? ;)
Puoi creare file di intestazione, in cui dichiari solo l'API pubblica e protetta.
All'utente vengono presentati solo questi, che possono includere. Collegano il loro codice con una libreria, che hai creato utilizzando l'API completa e le definizioni.
Per le funzioni incorporate: assicurati che siano utilizzate nel codice non incorporato, quindi ci sarà una definizione disponibile nella libreria (non sono sicuro che sarà incorporata nell'implementazione dell'utente, tuttavia).
Per il codice basato su modelli non esiste un vero modo per aggirare. Una soluzione senza mezzi termini è quella di creare codice, che utilizza il codice basato su modelli con diversi tipi di oggetti. L'utente sarà limitato a questi, perché sono le uniche definizioni disponibili nella tua libreria.