Есть ли способ обнаружить (например, с предупреждением компилятора), если классы объявляются friend
но не получайте доступ к членам парламента, не занимающим официального поста, т.е. когда дружба будет бесполезна?
Предупреждения компилятора не стандартизированы, поэтому это зависит от вашего конкретного компилятора (компиляторов). Я был бы очень удивлен, если бы хоть один из них поддерживал это, однако. Аналогичная ситуация может возникнуть, если у вас есть публичная функция-член, которая вызывается только другими публичными членами (то есть она не обязательно должна быть публичной), и опять же, я не думаю, что компиляторы это определяют.
Выполнение любого из этих тестов будет означать дополнительную работу для авторов компиляторов, и я сомневаюсь, что они сочтут их достаточно полезными для реализации.
Насколько я знаю, нет. Возможно, существует инструмент рефакторинга, который может это сделать. Вы всегда можете попробовать удалить дружбу и посмотреть, будет ли она по-прежнему компилироваться, но это может занять много времени для большого проекта.
Вы можете скомпилировать код, чтобы увидеть, что он компилируется, затем удалить все объявления «друга» (возможно, программно с помощью sed) и посмотреть, компилируется ли он по-прежнему.
Я не знаю, как обнаружить это с помощью предупреждений компилятора, но другой способ сделать это - зайти в файл определения класса и выполнить поиск и замену для friend class
на /*friend*/ class
и посмотреть, скомпилируется ли он. Конечно, это может оказаться довольно утомительным для большого проекта.