重複の可能性:
Pimpl イディオムと純粋な仮想クラス インターフェイス
非表示の実装では、「プロキシ クラス」または「ハンドル クラス」または「チェシャ猫の笑顔」テクニックについて多くのことを読みました。このテクニックでは、本質的に「実際の」クラスへのポインタをデータ メンバーとしてパブリック/プロキシ クラスに含めます。 、そして「実際の」クラスにすべてを実装します。
しかし、いくつかのサンプル コードを見ていたところ、ハンドル クラスに「ダミー」メソッドを記述してからハンドル クラスの実際のメソッドを呼び出す必要がないため、より簡単に思われる別の手法に気付きました。データメンバーがまったく必要なく、全体的により合理化されているようです。
手法は、すべてのパブリック メソッドを としてstruct
(またはすべてが であるクラスとしてpublic
) 定義し、すべてのvirtual=0
メンバー関数をそれ以上何も定義しないことです。したがって、実装はありません。次に、これへのポインターを返す静的関数を定義してstruct
、クライアントがクラスを使用できるようにします。しかし、裏では、このメソッドは構造体のサブクラスを実際に返します。このサブクラス内では、さらに多くの処理を行うことができます。
これが非常に簡単で、別のクラスへのポインターであるデータ メンバーを含み、データ メンバーのメソッドへのパブリック クラスの呼び出しを実装する必要があるパブリック クラスよりもエレガントであると主張するなら、なぜこれが実装の非表示で最も議論されている手法は?