- ベストアンサー
メンバ変数の隠蔽
メンバ変数を隠蔽する方法を教えてください。 静的ライブラリをインクルードファイルとともに 配布しようとしております。 Q.通常、インクルードファイルを見れば、利用者に、 どのようなメンバ変数が使われているか知られて しまいます。メンバ変数の存在そのものを隠蔽する 方法は無いでしょうか? よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 継承や仮想関数などを使って実現できたように > 記憶しております。 できますよ。使う側が変則的になりますが: --- foo.h --- class Foo { public: virtual ~Foo() {} virtual void f() =0; virtual int g() =0; static Foo* create(); }; --- foo.cpp --- #include "foo.h" class FooImpl : public Foo { public: virtual void f() { 処理 } virutal int g() { 処理 } }; Foo* Foo::create() { return new FooImpl(); }
その他の回答 (1)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
「どうしても]と仰るなら、小賢しいですが: --- foo.h --- class FooImpl; class Foo { FooImpl* impl_; public: Foo(); ~Foo(); void f(); int g(); }; --- foo.cpp --- #include "foo.h" class FooImpl { public: void f() { 処理の実体 } int g() { 処理の実体 } }; Foo::Foo() { impl_ = new FooImpl(); } Foo::~Foo() { delete impl_; } void Foo::f() { impl_->f(); } int Foo::g() { return impl_->g(); }
お礼
早速の回答、ありがとうございます。 いわゆるラッパーでしょうか。 私の勘違いかもしれまんせが、 継承や仮想関数などを使って実現できたように 記憶しております。 すみませんが、もう暫く待ってみます。
お礼
ありがとうございます。 確かこれでした。 create のおかげで、コンストラクタを露出させずに new できる、ということでしょうか。