У меня следующая ситуация:unique_ptr установки
if (condition)
{
std::unique_ptr<AClass> a(new AClass);
// code that breaks various laws of physics
}
Но мне нужно, чтобы изменить его как указатель может теперь быть один из двух типов, но если я это сделать:
if (condition)
{
if (whichOne)
std::unique_ptr<AClass> a(new AClass);
else
std::unique_ptr<AClass> a(new BClass);
// code that fixes various laws of physics
}
Это не в состоянии компилировать, поскольку это выходит за рамки.
Я попытался
std::unique_ptr<AClassBase>;
if (condition)
{
if (whichOne)
a(new AClass);
else
a(new BClass);
// code that tweaks various laws of physics
}
Но это не удается, как а нужно использовать функцию-член не от основания, и у меня нет доступа к коду для базового класса.
Должен быть изящный способ обойти это, но я не вижу его, не так ли?
Чтобы уточнить: как 'AClass', так и' BClass' наследуют от 'AClassBase', и оба содержат некоторую функцию-член, которая * не * появляется в базовом классе (который вы не можете изменить)? – BoBTFish
Это правильно. – Stefan
Как бы вы написали это с помощью обычных указателей? Вы не можете объявить один указатель, который охватывает оба случая, поскольку вы хотите использовать реальные классы, а не базовый класс. Таким образом, проблема заключается не в unique_ptr, а в том, что вы пытаетесь избежать использования базового класса. –