friend
クラスが宣言されているがプライベートメンバーにアクセスしていないかどうかを(たとえばコンパイラの警告で)検出する方法はありますか?友情が役に立たないとき?
4 に答える
コンパイラの警告を使用してこれを検出する方法はわかりませんが、これを行う別の方法は、クラス定義ファイルに移動して、で検索および置換を実行friend class
し/*friend*/ class
、それがまだコンパイルされるかどうかを確認することです。もちろん、これは大規模なプロジェクトではかなり面倒になる可能性があります。
コンパイラの警告は標準化されていないため、これは特定のコンパイラによって異なります。しかし、それらのいずれかがこれをサポートしているとしたら、私は非常に驚きます。同様の状況は、他のパブリックメンバーによってのみ呼び出されるパブリックメンバー関数がある場合(つまり、パブリックである必要はない)であり、コンパイラーはこれを検出しないと思います。
これらのテストのいずれかを実行することは、コンパイラの作成者にとって余分な作業を意味し、実装するのに十分に役立つと彼らが見なすかどうかは疑問です。
私が知っていることではありません。多分それを行うことができるリファクタリングツールがそこにあります。いつでも友情を削除して、それがまだコンパイルされるかどうかを確認できますが、大規模なプロジェクトでは時間がかかる場合があります。
コードをコンパイルしてコンパイルされていることを確認してから、すべての「friend」宣言を削除して(おそらく、sedを使用してプログラムで)、まだコンパイルされているかどうかを確認できます。