Reputation: 9
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
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