2012-02-20 79 views
0

我只需要知道如果我想從pImpl類調用我的copyconstuctor,我該如何做? 例如:如何從pimpl類調用一個調用者類的拷貝構造函數?

CImpl::SomeFunc() 
{ 

//cloning the caller class instance 

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

} 

我該如何做到這一點?

+0

這是很難回答的問題是沒有正確地問。投票結束。 – Nawaz 2012-02-20 03:09:49

+0

我的意思是我有一個情況,我需要調用我的調用者類的copyconstructor在其相應的pImpl類中。 我該怎麼做? – Yogi 2012-02-20 03:11:37

+0

如果你需要這樣做,你的設計是錯誤的開始。 – Nawaz 2012-02-20 03:13:00

回答

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()) {} 
    //... 
}; 

然後你就可以實現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); 
+0

如何從我的Pimpl類調用此複製構造函數? – Yogi 2012-02-20 03:55:53

+2

@Yogi:爲什麼爲什麼?你爲什麼要從'Pimpl'類中調用它?爲什麼需要它? – Nawaz 2012-02-20 03:56:55

+0

這就是需要的..我有一切的地方。它可能有一些如何?如果不是,那麼可能是我需要改變我的設計 – Yogi 2012-02-20 03:59:18

相關問題