2013-04-23 1 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

+0

Является ли 'Thingy'' typedef' или '# define'? Является ли 'Thingy' той же строкой в ​​обоих местах? – Yakk

ответ

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

Привет, спасибо за предложение, однако, я получаю сообщение об ошибке сказав: ошибка C2440: «инициализации»: не удается преобразовать из «повышение :: shared_ptr » на «повышение :: shared_ptr » – easythrees

+0

@ user1115716 ли как T типы одни и те же? Что такое вывод компилятора, а не только ошибка? – RandyGaul

+0

Я работал над этой проблемой, создав неконстантную версию и затеняя операции версии const. – easythrees

 Смежные вопросы

  • Нет связанных вопросов^_^