我有一个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]。因为爪子不是农场的虚拟成员而赢得了工作。有没有办法在循环访问农场时访问爪子而不创建单独的虚拟功能?在实际问题中,我有许多不同的子类变量,我希望当程序循环遍布服务器场(无限期)时向用户报告。
答案 0 :(得分:0)
您可以使用dynamic_cast
或std::dynamic_pointer_cast
,例如:
if(auto catPtr = std::dynamic_pointer_cast<cat>(animalPtr))
{
// now you use catPtr.claws
}
(假设animalPtr的类型为std::shared_ptr<animal>
)