如何为存储在std :: vector中作为基类的派生类编写重载函数

问题描述

正在尝试并寻找方法,希望获得一些帮助....

目标:让std :: vector存储Cat和Bear对象(如异类容器)。 然后迭代向量,并根据类型(猫/熊)执行重载的函数A或函数B

解决方案:我创建了一个基类(动物),std :: vector存储了这种类型的shared_ptrs。 我创建了Animal派生的Cat或Bear对象(新),将其指针投射到shared_ptr<Animal>并推到vector。

问题:我有两个处理函数,分别采用Cat或Bear参数。但是在传递给函数之前,我需要从向量中std::static_pointer_cast<Bear>std::static_pointer_cast<Cat>来获取动物指针。我希望自动调用正确的函数(由于重载)。

谢谢

class AnimalClass
{
   AnimalType type;
};

class Bear : public AnimalClass
{

}

class Cat : public AnimalClass
{
}

void action(Bear* bear)
{
  run();
}

void action(Cat* cat)
{
  stroke();
}


int main()
{
std::vector<shared_ptr<AnimalClass>> store;

// Populate store

Cat* cat= new Cat();
store.push_back(shared_ptr<AnimalClass>)cat );

Bear* bear= new Bear();
store.push_back(shared_ptr<AnimalClass>)bear );

// Process store

for (auto item : store)
{
   action(item);   // Does not compile unless item is static_pointer_cast to Bear or Cat,don't want to do that.
}

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)