• ベストアンサー

メンバ変数の隠蔽

メンバ変数を隠蔽する方法を教えてください。 静的ライブラリをインクルードファイルとともに 配布しようとしております。 Q.通常、インクルードファイルを見れば、利用者に、 どのようなメンバ変数が使われているか知られて しまいます。メンバ変数の存在そのものを隠蔽する 方法は無いでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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(); }

hhgoohh
質問者

お礼

ありがとうございます。 確かこれでした。 create のおかげで、コンストラクタを露出させずに new できる、ということでしょうか。

その他の回答 (1)

回答No.1

「どうしても]と仰るなら、小賢しいですが: --- 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(); }

hhgoohh
質問者

お礼

早速の回答、ありがとうございます。 いわゆるラッパーでしょうか。 私の勘違いかもしれまんせが、 継承や仮想関数などを使って実現できたように 記憶しております。 すみませんが、もう暫く待ってみます。

関連するQ&A