问题描述
正在尝试并寻找方法,希望获得一些帮助....
目标:让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 (将#修改为@)