2016-07-04 3 views
2

最初のものが最初です。私の質問は一般的な誤解に基づいている可能性が高いですが、私はあなたに明確な点を教えてくれることを願っています。ライブラリの内部のものが.hで表示されるのを防ぐ

私は、C++で異なるファイルにコードを書くときに、.h(定義用)と.cpp(実装用)を作成することを知っています。 例えば、クラスライブラリを書くときには、ヘッダにprivateメンバーとpublicメンバーの両方のdefinitiojを入れなければなりません。しかし何らかの理由でプライベートなものをユーザーから隠そうとしたらどうしたらいいですか?

ありがとうございます!

答えて

5

を参照してください。 Pimplは "実装へのポインタ"の略です。基本的には、実装の詳細をクラスに格納しません。

class MyClass 
{ 
public: 
    //public functions here 
private: 
    class Impl; //no definition, opaque 
    Impl* pimpl; 
}; 

をそしてあなただけの関数定義がそれを必要とするので、唯一の.cppファイルにあなたのMyClass::Implクラスを定義するために行く:代わりに次のような実装への不透明なポインタを格納します。

PIMPLイディオムには、クラスのインターフェイスが変更されない限り、実装に加えられたすべての変更がクラスクライアントの再コンパイルを必要としないという利点があります。

4

できません。これはC++の欠点の1つです。privateと書かれたものは、であり、依然としてのクラス宣言の一部であり、ヘッダーにも存在します。

あなた本当にはその後PIMPLイディオムを使用することができ、機能を非表示にしたい場合。個人的には、イディオムを使用すると、あなたのクラスが他の問題を引き起こす可能性があるので、私は欠点を抱えて生きることを好みますが、もはや簡単にコピーできません。

はあなたがPimplイディオムを使用Why should the "PIMPL" idiom be used?

関連する問題