この状況はどこでも発生する可能性がありますが、Windows 用の C++ でのプログラミング。これは、質問を管理しやすくするために私の問題を簡略化したものなので、詳細に巻き込まれないでください:)
Windowsデータ項目class Window
を含むクラスがあります。クラスのユーザーがそのウィンドウで操作を実行するためにクラスを通過する必要があるように、それHWND
を完全にカプセル化したいので、プライベートメンバー変数に格納されます。HWND
カプセル化が壊れて、ユーザーがクラスをバイパスできるようになるため、パブリックの「ゲッター」を提供したくありません。
class Direct3d11
ここで、directx API の一部をカプセル化するクラスを作成したいと考えています。このクラスのインスタンスを作成するには、ウィンドウの HWND が必要なので、Window
コンストラクターでオブジェクトを渡します。
class Direct3D11
{
public:
Direct3D11(const Window& window);
};
コンストラクター内ではウィンドウ オブジェクトにアクセスできますが、Direct3D11 クラスが管理するウィンドウ オブジェクトを物理的に作成できるようにするために、内部に含まれる HWND が必要ですが、その情報を取得する方法はありません。
Window クラスに HWND を取得するプライベート ゲッター関数を追加し、Direct3D11 クラスを Window のフレンド クラスにして、関数を呼び出すようにすることができます。
ただし、特にクラス Window はクラス Direct3D11 について何も知る必要がないため、これはあまり洗練されていないように見えます。
これを達成するためのより良い方法がありませんか?フレンド クラスは魅力的ではありません。パブリック ゲッター関数を使用することもあまり魅力的ではありません。