Неиспользуемый класс друга в C ++ - PullRequest
5 голосов
/ 13 июля 2010

Есть ли способ обнаружить (например, с предупреждением компилятора), если классы объявлены friend, но не имеют доступа к закрытым членам, т.е.когда дружба бесполезна?

Ответы [ 4 ]

6 голосов
/ 13 июля 2010

Я не знаю, как обнаружить это с помощью предупреждений компилятора, но другой способ сделать это - перейти к файлу определения класса, выполнить поиск и заменить friend class на /*friend*/ class и посмотреть, компилируется ли он до сих пор.,Конечно, это может стать довольно утомительным для большого проекта.

3 голосов
/ 13 июля 2010

Предупреждения компилятора не стандартизированы, поэтому это зависит от вашего конкретного компилятора (ов).Однако я был бы очень удивлен, если бы кто-нибудь из них поддержал это.Аналогичная ситуация была бы, если бы у вас была открытая функция-член, которая вызывалась только другими открытыми членами (то есть она не должна быть общедоступной), и опять же я не думаю, что какой-либо компилятор обнаружит это.

Выполнениелюбой из этих тестов будет означать дополнительную работу для авторов компиляторов, и я сомневаюсь, что они сочтут их достаточно полезными для реализации.

2 голосов
/ 13 июля 2010

Не то, что я знаю.Может быть, есть инструмент рефакторинга, который может это сделать.Вы всегда можете попробовать удалить дружбу и посмотреть, скомпилируется ли она, но это может занять много времени для большого проекта.

0 голосов
/ 13 июля 2010

Вы можете скомпилировать код, чтобы увидеть, что он компилируется, а затем удалить все объявления «друзей» (возможно, программно с помощью sed) и посмотреть, компилируется ли он до сих пор.

...