コピーコンストラクターをpImplクラスから呼び出すかどうかを知りたいだけですが、どうすればできますか? 例:呼び出し元クラスのコピーコンストラクタをpimplクラスから呼び出す方法は?
CImpl::SomeFunc()
{
//cloning the caller class instance
caller = new Caller(*this)// I cant do this since its a pImpl class
}
これはどのように達成できますか?
コピーコンストラクターをpImplクラスから呼び出すかどうかを知りたいだけですが、どうすればできますか? 例:呼び出し元クラスのコピーコンストラクタをpimplクラスから呼び出す方法は?
CImpl::SomeFunc()
{
//cloning the caller class instance
caller = new Caller(*this)// I cant do this since its a pImpl class
}
これはどのように達成できますか?
あなたのコメントを読んだら、コピーの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);
質問に答えることは非常に困難です適切に尋ねられません。近く投票しました。 – Nawaz
私は、対応するpImplクラスの呼び出し元クラスのcopyconstructorを呼び出す必要がある状況があることを意味します。 どうすればいいですか? – Yogi
これを行う必要がある場合は、まず設計が間違っています。 – Nawaz