повышение :: shared_ptrповысить :: shared_ptr <T> - PullRequest
4 голосов
/ 10 июня 2010

Я хочу вывести константу из boost::shared_ptr, но я boost::const_pointer_cast не является ответом.boost::const_pointer_cast хочет const boost::shared_ptr<T>, а не boost::shared_ptr<const T>.Давайте воздержимся от обязательного «вы не должны этого делать».Я знаю ... но мне нужно сделать это ... так, какой самый лучший / самый простой способ сделать это?

Для ясности:

boost::shared_ptr<const T> orig_ptr( new T() );

boost::shared_ptr<T> new_ptr = magic_incantation(orig_ptr);

Мне нужно знать magic_incantation()

Ответы [ 2 ]

9 голосов
/ 10 июня 2010

boost::const_pointer_cast - это функция, которую вы хотите использовать:

boost::shared_ptr<const int> ci(new int(42));
boost::shared_ptr<int> i(boost::const_pointer_cast<int>(ci));

Вам это не подходит?Я проверил это как с Boost 1.43, так и с реализацией Visual C ++ 2010 C ++ 0x - никаких проблем ни с одним из них.

2 голосов
/ 10 июня 2010

Обратите внимание, что другие "акционеры" будут очень удивлены , если не сказать больше, если общая const T внезапно изменится ...

...