C'è un modo per rilevare (ad esempio con avviso del compilatore) se le classi sono dichiarate friend
ma non accedere ai membri privati, es. quando l'amicizia è inutile?Classe di amici non utilizzati in C++
risposta
Gli avvisi del compilatore non sono standardizzati, quindi questo dipende dal/i compilatore/i specifico/i. Sarei molto sorpreso se qualcuno di loro supportasse questo, comunque. Una situazione simile potrebbe essere se tu avessi una funzione membro pubblica che è stata chiamata solo da altri membri pubblici (il che significa che non deve essere pubblica), e ancora una volta non penso che nessun compilatore lo rilevi.
Fare uno di questi test significherebbe un lavoro supplementare per gli autori del compilatore e dubito che li vedrebbero come sufficientemente utili da implementare.
Non ho capito bene il tuo esempio di membri pubblici, ma altrimenti sono d'accordo con la tua risposta. –
@Helltone: Suppongo che intenda che se si accede a una funzione membro pubblica solo attraverso altre funzioni della stessa classe, non è necessario che sia pubblica. – casablanca
Non che io sappia. Forse c'è uno strumento di refactoring là fuori che può farlo. Puoi sempre provare a rimuovere l'amicizia e vedere se è ancora compilato, ma potrebbe richiedere molto tempo per un grande progetto.
Non so come rilevare questo utilizzando avvisi del compilatore, ma un altro modo di fare questo sarebbe quella di andare al file di definizione della classe e fare una ricerca & sostituzione per friend class
con /*friend*/ class
e vedere se si compila ancora. Naturalmente, questo potrebbe diventare piuttosto noioso per un grande progetto.
Ciò causa un cambiamento piuttosto complesso nella semantica. Sarebbe piuttosto difficile da spiegare in un commento qui, ma fondamentalmente la ricerca dei nomi è diversa. – MSalters
@MSalters: hai un link dove posso leggere a riguardo? Sono curioso di sapere qual è il cambiamento nella semantica. – Praetorian
È possibile compilare il codice per verificare che venga compilato, quindi rimuovere tutte le dichiarazioni "amico" (magari programmaticamente con sed) e vedere se è ancora compilato.
La seguente macro è un modo semplice per trasformare "amico" (e il resto di quella riga di codice) in un commento. Questo non funzionerà se la dichiarazione amico è multilinea. #define amico // –
- 1. Sono amici in C++ reciproco?
- 2. C# Classi di amici e composizione OOP
- 3. Classi di amici in Objective-C
- 4. classe di amici con accesso limitato
- 5. Argomenti non utilizzati in R
- 6. Elenco di prefissi obiettivo-c già utilizzati
- 7. Come amici di amici in FB grafico API
- 8. Come individuare metodi e #import non utilizzati in Objective-C
- 9. Amici confusione
- 10. Modelli C++: Specifiche dei modelli parziali e classi di amici
- 11. C++ - ostream, amici e spazi dei nomi
- 12. In C++, posso impedire che la classe derivata venga istanziata da classi diverse dagli amici
- 13. La classe di importazione C# in un'altra classe non funziona
- 14. amici template parzialmente specializzati
- 15. Come trovare tutti i metodi non utilizzati di una classe in PyCharm?
- 16. Plugin di Eclipse per scoprire i metodi non utilizzati in una classe/pacchetto
- 17. In C, sono puntatori di array o utilizzati come puntatori?
- 18. Rimuovere gli utilizzi non utilizzati sull'intero assieme
- 19. C# tipi statici non possono essere utilizzati come parametri
- 20. Facebook Api ottenere conteggio totale di amici, ma non amici dati
- 21. Trova moduli "usati" di Perl non utilizzati
- 22. istruzione package contrassegnato come "importazione non utilizzati"
- 23. Facebook graph api lista amici non completa
- 24. Come trovare metodi non utilizzati utilizzando IntelliJ?
- 25. Rtti non funziona con i tipi di generici utilizzati come campi di classe
- 26. Qual è CocoaPods "(non utilizzati)"
- 27. amici di google + api persona
- 28. Ottieni amici di google plus
- 29. Classe C++ non è di per sé
- 30. Proguard rimuove i metodi sottoposti a override in classe astratta come non utilizzati
Forse puoi unire un programma usando le librerie Clang? –