さまざまな派生オブジェクトを生成し、次のように返すはずのこの関数がありますunique_ptr<base>
。
class base {}; // contains pure functions.
class derived1 {}; // reifies that pure iface.
class derived2 {}; // reifies that pure iface.
unique_ptr<base> factory::load(int param)
{
switch (param)
{
case PARAM_MAIN:
return new derived1();
// return std::move(new derived1());
case PARAM_2:
return new derived2();
case ...:
return new derived...();
}
}
std::move を使用しても、これを実行する方法はありません。(dynamic_cast も使用しましたが、間違っていた可能性があります)。
これは私が得るエラーです: (gcc (GCC) 4.8.1 20130725 (プレリリース) on ArchLinux)
could not convert '(std::shared_ptr<base::model>((*(const std::shared_ptr<base::model>*)(& associatedModel))), (operator new(48ul), (<statement>, ((derived1*)<anonymous>))))' from 'derived1*' to 'std::unique_ptr<base>'
associatedModel));
自分が何をしたいのかが明確になったことを願っています。
どうすればいいのですか?ありがとう。