有沒有一種方法可以檢測到(例如編譯器警告)如果類聲明爲friend
但不訪問私有成員,即。當友誼毫無用處?C++中未使用的朋友類
回答
編譯器警告不是標準化的,所以這取決於您的特定編譯器。但是,如果他們中的任何一位支持這一點,我會感到非常驚訝。如果你有一個只有其他公共成員調用的公共成員函數(這意味着它不需要公開),那麼類似的情況就是如此,並且我不認爲任何編譯器都會檢測到這一點。
做這些測試中的任何一個都會給編譯器編寫者帶來額外的工作,我懷疑他們是否會認爲它們足夠有用以實現。
我不太瞭解你的公共成員的例子,但否則我同意你的答案。 – 2010-07-13 13:55:05
@Helltone:我猜他是說如果一個公共成員函數只能通過同一個類的其他函數來訪問,那麼它就不需要公開。 – casablanca 2010-07-13 15:38:11
不是我所知道的。也許有一個可以做到的重構工具。你總是可以嘗試消除友誼,看看它是否仍然編譯,但這對於一個大型項目來說可能是耗時的。
我不知道如何來檢測這個使用編譯器警告,但這樣做會去你的類定義文件的另一種方式,做一個搜索&與/*friend*/ class
替換爲friend class
,看看它是否仍然編譯。當然,這對於一個大型項目來說可能會很乏味。
這會導致語義上相當複雜的變化。在這裏的評論中很難解釋,但名稱查找基本不同。 – MSalters 2010-07-13 14:22:13
@ MSalters:你有鏈接,我可以在哪裏閱讀?我很想知道語義的變化是什麼。 – Praetorian 2010-07-13 17:07:08
您可以編譯代碼以查看它是否編譯,然後刪除所有'朋友'聲明(可能以編程方式使用sed)並查看它是否仍然編譯。
以下宏是一種將'朋友'(以及該行代碼的其餘部分)轉換爲註釋的簡單方法。如果朋友聲明是多行的,這將不起作用。 #define朋友// – 2010-07-13 23:41:14
- 1. C++朋友類
- 2. C++使用「朋友」的
- 3. 朋友類目標C
- 4. 爲什麼C#中沒有朋友類?
- 5. 不能使用基類朋友類
- 6. 朋友的MongoDB中的朋友
- 7. 使用Levenshtein距離在字典中尋找朋友的朋友
- 8. 朋友專門的模板類(C++)
- 9. Facebook朋友的朋友
- 10. 如何在C++/CX中使用朋友類?
- 11. Graph-Traversal:我如何使用Gremlin查詢「朋友和朋友的朋友」
- 12. SQL表爲朋友,共同朋友,朋友朋友等
- 13. C++朋友繼承
- 14. C++ - 朋友功能
- 15. 如何獲取用戶朋友中的每一個朋友的朋友數?
- 16. 查找FaceBook朋友使用c#facebook sdk
- 17. 使用mysql的朋友realtionships?
- 18. C++:朋友函數,派生類
- 19. 模板類C++朋友函數
- 20. C++ class with objective-c朋友
- 21. 使用facebook api訪問朋友的朋友的數據
- 22. 如何獲得使用活動記錄的朋友的朋友?
- 23. PostgreSQL的:朋友的朋友,但我的那些朋友們
- 24. 朋友類:繼承類不是朋友嗎?
- 25. 類模板和朋友類
- 26. 上網的朋友C#facebook.dll
- 27. 如何獲得朋友的朋友的朋友...
- 28. 使用Facebook GraphAPI訪問朋友的朋友照片?
- 29. 使用OrientDB查找「朋友的朋友」SQL
- 30. Facebook朋友的朋友使用圖形API計數?
也許你可以使用Clang庫粘貼一個程序? – 2010-07-13 13:38:49