Динамическое приведение для unique_ptr

Как и в случае с Boost, C++11 предоставляет некоторые функции для приведения типов shared_ptr:

std::static_pointer_cast
std::dynamic_pointer_cast
std::const_pointer_cast

Мне интересно , однако, почему нет эквивалентных функций для unique_ptr.

Рассмотрим следующий простой пример:

class A { virtual ~A(); ... }
class B : public A { ... }

unique_ptr<A> pA(new B(...));

unique_ptr<A> qA = std::move(pA); // This is legal since there is no casting
unique_ptr<B> pB = std::move(pA); // This is not legal

// I would like to do something like:
// (Of course, it is not valid, but that would be the idea)
unique_ptr<B> pB = std::move(std::dynamic_pointer_cast<B>(pA));

Есть ли какая-либо причина, по которой этот шаблон использования не рекомендуется и, следовательно, функции, эквивалентные тем, что представлены в shared_ptr, не предусмотрены для unique_ptr] ?

49
задан ildjarn 12 June 2012 в 07:33
поделиться