freeinternet
freeinternet

Reputation: 9

Can't cast my double derived class of my base class into my base class C++

I have an archi like that:

namespace nts {

   class IComponent
   {
   };

   class AbsComponent : public IComponent
   {
   };

   class cInput : public AbsComponent
   {
   };

}

I can't figure out how to cast a cInput as a std::unique_ptr < nts::IComponent > i tried like this with C-style cast:

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);
  }

How could i cast this ?

Upvotes: 0

Views: 91

Answers (1)

DeducibleSteak
DeducibleSteak

Reputation: 1498

Just do:

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

Also, you probably meant:

return component;

instead of:

return (val);

But you can just do:

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

instead of the two lines.

EDIT:

std::make_unique is available from C++14, if you're using an older version, strongly consider updating, or you can do:

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

or

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

Upvotes: 1

Related Questions