【发布时间】:2021-02-10 12:52:55
【问题描述】:
我正在编写一个程序,该程序使用两种动物(狼和兔子)运行模拟。 在我的代码中,我有虚拟接口类 IAnimal 和名为 Animal 的基类。因此,在代码的一部分中,我需要为我的动物创建新实例,我写了这个:
void Simulation::age_and_multiply_and_die() {
for (auto *animal: animals) {
if (animal->is_dead()) continue;
animal->aging();
if (animal->must_multiply()) {
switch (animal->get_type()) {
case Type::Rabbit: {
spawn_animal(new Rabbit((Animal *) animal, *this));
break;
}
case Type::Wolf: {
spawn_animal(new Wolf((Animal *) animal, *this));
((Wolf *) animal)->hungry_again();
break;
}
}
}
spawn_animal() 在哪里:
void spawn_animal(IAnimal *animal) {
animals.push_back(animal);
Coords pos = animal->get_position();
field[pos.y][pos.x].push_back(animal);
}
所以,我想摆脱 switch 语句并使用 unique_ptr 来做这样的事情:
class IAnimal {
public:
virtual Coords get_position() = 0;
virtual std::unique_ptr<IAnimal> breed() = 0;
...
void Simulation::age_and_multiply_and_die() {
for (auto *animal: animals) {
if (animal->is_dead()) continue;
animal->aging();
if (animal->must_multiply()) {
IAnimal child = animal.breed();
if (child)
animals.push_back(child);
}
}
我该怎么做?
【问题讨论】:
-
为什么你认为
unique_ptr与摆脱 switch 语句有关?作为这里的新用户,也请带上tour并阅读How to Ask。 -
我猜你的问题是编译错误。不知道我猜对了没有。在任何情况下,您都可以edit您的帖子并描述您遇到的具体问题。
标签: c++ class multiple-inheritance unique-ptr