2013-04-23 45 views
0

我在功能工作,我不能改變(除了我正在寫),代碼庫,在這裏有一些類型:使一個不可變型可變(consts和升壓)

// Pointer to a mutable thingy 
typedef boost::shared_ptr<Thingy>  MPtr; 

// Pointer to an immutable thingy 
typedef boost::shared_ptr<const Thingy> Ptr; 

現在,我有一個MPtr類型的對象,我需要將其分配給Ptr類型的對象,但是我不能(編譯器告訴我沒有可能的轉換)。使用const_cast似乎也沒有幫助:

MPtr foo = const_cast<MPtr*>(moo); 

我收到一個錯誤,說它無法更改基礎類型。關於如何解決此問題的任何想法?

+0

你是否樂意得到這種哈克?如果你採用moo的地址,然後使用C風格的演員陣容,並取消你應該是好的。 MPtr foo =(Mptr)&moo; – RandyGaul 2013-04-23 00:27:21

+0

'Thingy'是一個'typedef'還是'#define'? Thingy在兩個地方都是同一個字符串嗎? – Yakk 2013-04-23 02:00:21

回答

1
MPtr foo = boost::const_pointer_cast<Thingy>(moo); 
+0

嗨,感謝您的建議,但是,我得到一個錯誤說: 錯誤C2440:初始化:不能從轉換「的boost :: shared_ptr的」到「提高:: shared_ptr的」 – easythrees 2013-04-23 00:51:44

+0

@ user1115716兩者是叔類型相同?什麼是編譯器輸出,不只是錯誤? – RandyGaul 2013-04-23 00:54:17

+0

我已經通過製作一個非const版本並映射const版本的操作來解決此問題。 – easythrees 2013-04-23 05:28:06