0

私は次のサードパーティ クラスを持っています (いくつかのポインターのラッパーのみ):

// 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のは、自分のニーズに合わず、自分のコードに残しておきたくないからです。

4

1 に答える 1