私は次のサードパーティ クラスを持っています (いくつかのポインターのラッパーのみ):
// a.h
class AImpl;
class A
{
AImpl* pImpl;
public:
A(): pImpl(0) {}
A(AImpl* ptr): pImpl(ptr) {}
...
AImpl* getImpl() const { return pImpl; }
...
void someMethodOfA();
};
のインターフェイスを変更したいA
: 実装の詳細を隠しながら、いくつかのメソッドを無効にし、いくつかの新しいメソッドを追加します。私は次のことをすることにしました:
// new_a.h
class AImpl;
class A;
class NewA
{
AImpl* pImpl;
public:
NewA( const A& a );
...
void newMethodOfA();
...
};
//new_a.cpp
#include "a.h"
NewA::NewA( const A& a ): pImpl( a.getImpl() ) {}
...
void NewA::newMethodOfA()
{
A( pImpl ).someMethodOfA();
}
...
そうしてもいいですか?多分もっと良い解決策がありますか?インターフェイスを変更したいA
のは、自分のニーズに合わず、自分のコードに残しておきたくないからです。