1
私は抽象クラスの戦士から延長されているヒーローといくつかのクラスがあります。ファクトリメソッドからunique_ptrを返すにはどうすればよいですか?
enum Warrior_ID { Infantryman_ID=0, Archer_ID, Horseman_ID };
class Warrior
{
public:
virtual void info() = 0;
virtual ~Warrior() { }
static unique_ptr<Warrior> createWarrior(Warrior_ID id);
};
class Infantryman: public Warrior
{
public:
void info()
{
cout << "Infantryman" << endl;
}
};
class Archer: public Warrior
{
public:
void info()
{
cout << "Archer" << endl;
}
};
class Horseman: public Warrior
{
public:
void info()
{
cout << "Horseman" << endl;
}
};
を、これは特定の文字を返す私のファクトリメソッド、次のとおりです。
私は特定のでunique_ptrを返すことができますどのようにunique_ptr<Warrior> Warrior::createWarrior(Warrior_ID id)
{
unique_ptr<Warrior> p;
switch (id)
{
case Infantryman_ID:
p = new Infantryman(); //this doesn't work
break;
case Archer_ID:
p = new Archer(); //this doesn't work
break;
case Horseman_ID:
p = new Horseman(); //this doesn't work
break;
default:
}
return p;
};
make_uniqueを使わずに文字を入力しますか?
または、ローカル変数をすべて取り除く - 'return unique_ptr(new Infantryman());' –
@NeilButterworth確かに。この場合、RVOとそれを思い出すまでは、本当に問題はないと思った。 – juanchopanza