私は呼び出し元から非表示にしたいデータメンバを持つクラスを持っています(その型のヘッダーを含めるとコンパイル時間が大幅に増え、このクラスを使用するすべてのプロジェクトでインクルードパスに追加のパスを追加します)。プライベート(非表示)QSharedData
このクラスは、QSharedDataPointer
を使用してこのデータを格納します。このようにして、デフォルトのコピーコンストラクタを使用してコピーすることができます。
このクラスの基本的な構造は次のとおりです。
class MyClass {
private:
QSharedDataPointer<MySharedClassData> m_data;
};
は、同じヘッダファイルに(QSharedData
から継承)MySharedClassData
を定義せずにこのを行うにはどんな派手なトリックはありますか?または、データフィールドを隠す他の良い方法がありますか?
私は既にMySharedClassData
の順方向宣言を試みましたが、これはうまくいかなかった(m_data
がprivate
であるにもかかわらず)。
m_data
をQSharedDataPointer<QSharedData>
と宣言することができる唯一の解決策ですが、アクセスするたびにデータメンバーをキャストする必要があります。より良い解決策はありますか?
この場合、[Pimpl](http://en.wikipedia.org/wiki/Opaque_pointer)イディオムは私が考えることができるものですか? – maverik
@maverik:はい。 "' QSharedDataPointer'クラスは、 '暗黙のうちに共有されるオブジェクトへの' pinterinterfaceを表します。 " – MSalters
はい、これはまさに私がやろうとしていることです。残念ながら、これは 'QSharedDataPointer'では動作しません。少なくとも、私はこのことをどうやって解決するのか分からない。 –