0

pImpl クラスから copyconstuctor を呼び出したいかどうかを知りたいのですが、どうすればよいですか? 例えば:

CImpl::SomeFunc()
{

//cloning the caller class instance

caller = new Caller(*this)// I cant do this since its a pImpl class

}

どうすればこれを達成できますか?

4

1 に答える 1

3

コメントを読んだ後、クラスのコピーを作成する機能を提供できるようにしたいと考えているようです。Callerもしそうなら、その場合、ポインタCallerのハードコピーを作成できるクラスのコピーコンストラクタを実装する必要があります。m_pImpl

class CallerImpl;

class Caller
{
   std::shared_ptr<CallerImpl> m_pImpl;
public:
   Caller(Caller const & other) : m_pImpl(other.m_pImpl->Clone()) {}
   //...
};

そして、次のようにクラスにClone()関数を実装できます。CallerImpl

class CallerImpl
{
   public:
     CallerImpl* Clone() const
     {
         return new CallerImpl(*this); //create a copy and return it
     }
     //...
};

今、あなたはコピーを作ることができますCaller

//Usage
Caller original;
Caller copy(original); 
于 2012-02-20T03:44:22.513 に答える