Не могу привести мой двойной производный класс моего базового класса в мой базовый класс C ++ - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть такой архив:

namespace nts {

   class IComponent
   {
   };

   class AbsComponent : public IComponent
   {
   };

   class cInput : public AbsComponent
   {
   };

}

Я не могу понять, как привести cInput как std :: unique_ptr Я пытался так с C стиль исполнения:

std::unique_ptr<nts::IComponent> createInput(const std::string &val) noexcept
  {
        std::unique_ptr<nts::IComponent> component = (std::unique_ptr<nts::IComponent>)new nts::cInput(val));
        return (component);
  }

Как я могу разыграть это?

1 Ответ

1 голос
/ 28 февраля 2020

Просто сделайте:

std::unique_ptr<nts::IComponent> component = std::make_unique<nts::cInput>(val);

Также вы, вероятно, имели в виду:

return component;

вместо:

return (val);

Но вы можете просто сделать:

return std::make_unique<nts::cInput>(val);

вместо двух строк.

РЕДАКТИРОВАТЬ:

std::make_unique доступно из C ++ 14, если вы используете более старую версию, настоятельно рекомендуем обновить , или вы можете сделать:

std::unique_ptr<nts::IComponent> component = std::unique_ptr<nts::cInput>(new nts::cInput(val));

или

return std::unique_ptr<nts::cInput>(new nts::cInput(val));
...