我有一个指向父类动物的智能指针的std::向量。
std::vector<std::shared_ptr<animal>> farm;
猫、狗和老鼠的子类都有父类动物。矢量中只指向猫、狗和老鼠。像这个
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]。爪子不会工作,因为爪子不是农场的虚拟成员。有没有一种方法可以在不创建单独虚拟功能的情况下在农场中循环时访问爪子?在实际的问题中,我有许多不同的子类变量,当程序在农场上循环时(无限期),我想向用户报告。
您可以为此使用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>
类型)