web-dev-qa-db-ja.com

プライベートデータメンバーを非表示にしますか? (C ++)

Cppファイルで、C++クラスのプライベートデータメンバーをユーザーから隠す方法はありますか?私はプライベートメンバーを実装の一部と考えており、ヘッダーファイルで宣言するのは少し逆のようです。

40

「pimpl」イディオムは、これが一般的に処理される方法です。

見る

62

pIMPLイディオムのようなものを使用したい

http://en.wikipedia.org/wiki/Opaque_pointer

10
Keith Nicholas

Pimpl Idiom を参照

8

これを行う古典的な方法は、機能を実装する内部クラスへのプロキシポインタを使用することです。私が知っているC++で部分的なクラス定義を行う方法はありません。

4
Nick

コマーシャルに行く? ;)

パブリックおよび保護されたAPIのみを宣言するヘッダーファイルを作成できます。

ユーザーに表示されるのはこれらだけであり、含めることができます。それらは、完全なAPIと定義を使用して構築したライブラリとコードをリンクします。

インライン関数の場合:非インラインコードで使用されていることを確認してください。ライブラリで使用可能な定義が存在します(ただし、ユーザー実装でインライン化されるかどうかはわかりません)。

テンプレート化されたコードの場合、実際の回避策はありません。中途半端な解決策は、さまざまなオブジェクトタイプでテンプレート化されたコードを使用するコードを作成することです。これらはライブラリで使用できる唯一の定義であるため、ユーザーはこれらに制限されます。

1
user258638