pImpl クラスから copyconstuctor を呼び出したいかどうかを知りたいのですが、どうすればよいですか? 例えば:
CImpl::SomeFunc()
{
//cloning the caller class instance
caller = new Caller(*this)// I cant do this since its a pImpl class
}
どうすればこれを達成できますか?
pImpl クラスから copyconstuctor を呼び出したいかどうかを知りたいのですが、どうすればよいですか? 例えば:
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()) {}
//...
};
そして、次のようにクラスに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);