2012-02-20 27 views
0

コピーコンストラクターをpImplクラスから呼び出すかどうかを知りたいだけですが、どうすればできますか? 例:呼び出し元クラスのコピーコンストラクタをpimplクラスから呼び出す方法は?

CImpl::SomeFunc() 
{ 

//cloning the caller class instance 

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

} 

これはどのように達成できますか?

+0

質問に答えることは非常に困難です適切に尋ねられません。近く投票しました。 – Nawaz

+0

私は、対応するpImplクラスの呼び出し元クラスのcopyconstructorを呼び出す必要がある状況があることを意味します。 どうすればいいですか? – Yogi

+0

これを行う必要がある場合は、まず設計が間違っています。 – Nawaz

答えて

2

あなたのコメントを読んだら、コピー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()) {} 
    //... 
}; 

そして、あなたのようにCallerImplクラスでClone()機能を実装できます。今、あなたはCallerのコピーを作成することができます

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

//Usage 
Caller original; 
Caller copy(original); 
+0

Pimplクラスからこのコピーコンストラクタを呼び出すにはどうすればよいですか? – Yogi

+2

@ Yogi:なぜ、なぜですか?なぜあなたは 'ピンプル'クラスから呼び出されたいのですか?なぜそれが必要ですか? – Nawaz

+0

それは必要なことです。私はすべてのものを持っています。どうしたらいいでしょうか?私のデザインを変える必要があるかもしれません。 – Yogi

関連する問題