2011-05-17 54 views
7
class A {}; 

typedef shared_ptr<const A*> AConstPtr; 
typedef shared_ptr<A*> APtr; 

vector<APtr> ptr; 

const vector<AConstPtr>* foo() 
{ 
    return &ptr; 
} 

此代碼不編譯,因爲「存在來自矢量< APTR > *沒有隱式轉換成const矢量< AConstPtr > * 「 反正有沒有做這個工作,沒有創建一個新的矢量,也沒有使用不安全的轉換?安全(shared_ptr的物體的矢量)轉換成(的shared_ptr的矢量到恆定對象)

我需要這個的原因是因爲我有一個類在內部存儲一個列表作爲向量< APtr >,但需要通過其接口公開一個完全的常量版本。

+2

你可以通過它的接口公開一對迭代器嗎? – Cubbi 2011-05-17 03:32:28

回答

6

由於不同的shared_ptr不是相關的類型,所以沒有辦法做這樣的轉換。

首先,你真的確定你需要公開的實現細節,有一個共享指針的內部向量?這真的會將你與該實現綁定在一起,並且不會在不中斷API的情況下進行更改。

如果使用@ Cubbi的建議並讓您的界面與beginend方法互動?然後,您可以輕鬆地向外部客戶展示容器,而無需將自己綁定到vector

+0

+1,同樣的答案 – iammilind 2011-05-17 03:47:34