我可以报告子类存储在std :: vector <parent-class> </parent-class>中的子类值

时间:2015-03-04 21:45:59

标签: c++

我有一个std :: vector指向父类动物的智能指针。

std::vector<std::shared_ptr<animal>> farm; 

子类cat,dog和mouse都有父类动物。 向量中仅指向猫,狗和鼠标。喜欢这个

class cat : public animal {
public:
    bool claws;
};

farm.push_back(std::make_shared<cat>());
farm.push_back(std::make_shared<dog>());
farm.push_back(std::make_shared<mouse>());

Cat也有公共成员cat.claws(类型为bool)。

我知道农场[0]。因为爪子不是农场的虚拟成员而赢得了工作。有没有办法在循环访问农场时访问爪子而不创建单独的虚拟功能?在实际问题中,我有许多不同的子类变量,我希望当程序循环遍布服务器场(无限期)时向用户报告。

1 个答案:

答案 0 :(得分:0)

您可以使用dynamic_caststd::dynamic_pointer_cast,例如:

if(auto catPtr = std::dynamic_pointer_cast<cat>(animalPtr))
{
    // now you use catPtr.claws
}

(假设animalPtr的类型为std::shared_ptr<animal>