まず、誰もがこのアドバイスに同意するわけではありません。Meyers(編集:とHerb Sutter)以外の誰かがこのアドバイスをしているのを見たことがないと思います。そして、C++のコンテキスト内でのみ与えられたのを見たことがあります。たとえば、JavaとC#には無料の関数がないため、JavaまたはC#で「非メンバーの非フレンド関数」を作成することは実際には不可能です。Ruby開発者は、たとえば、意図的にメンバー関数を作成する「人道的なインターフェイス」を好みます。非メンバーができるのと同じことをしてください。ただ、それらの関数の呼び出し元の生活を楽にするためです。
そして、マイヤーズのアドバイスを受け入れたとしても、メンバー関数よりも非メンバー非フレンド関数を優先する必要があります(そしてそれは良いアドバイスだと思いますが、クラスの実装をそのメンバーからでもカプセル化することを考えると、カプセル化をより適切に適用するのに確かに役立ちました関数)、それは考慮すべき設計の唯一の軸です。
オブジェクト指向設計の重要な概念は、オブジェクトが何かをするということです。オブジェクトは、他のコードが処理するセッターとゲッターの単なるバッグではありません。代わりに、動作をアタッチする必要があります。つまり、動作を実行するメソッドを設定する必要があります。また、それらの動作の詳細をカプセル化する必要があります。OOへのこのアプローチに従う場合、マイヤーズのアドバイスを極端に実行すると、カプセル化を支援するのではなく、カプセル化が損なわれます。クラスの内部実装変数を非表示にするのではなく、ゲッターとセッターを介して公開することになります。メソッド(クラスに代わって処理を行うコード。これが、クラスを最初に作成する唯一の理由です)がそれに到達できます。
したがって、マイヤーズのアドバイスをどこまで取るかという質問に答えるには、クラスのパブリックインターフェイスを使用して非フレンド非メンバー関数として合理的に実装できる場合は、関数をメンバー関数に不必要に変換しないでください。ただし、クラスのパブリックインターフェイスを損傷しないでください。パブリックインターフェイスであり、何かをメンバーにすることを避けるために実装を公開することにより、カプセル化に違反します。また、カプセル化と他の懸念事項や他のアプローチとのバランスをとるようにしてください(チームがそのルートを選択する場合は、本格的な人道的インターフェースの長所と短所を含みます)。