【发布时间】:2015-05-06 02:26:22
【问题描述】:
我有一个 std::vector 指向父类动物的智能指针。
std::vector<std::shared_ptr<animal>> farm;
子类 cat、dog 和 mouse 各有父类动物。 向量中仅指向 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 类型)。
我知道farm[0].claws 不起作用,因为claws 不是farm 的虚拟成员。有没有办法在不创建单独的虚拟功能的情况下循环农场时访问爪子?在实际问题中,当程序在农场(无限期地)循环时,我想向用户报告许多不同的子类变量。
【问题讨论】:
-
关键是这里的意图...为什么你想访问
claws? -
用于报告目的。我在循环中处理的每个子类的虚函数取决于每个子类唯一的变量集。我也想报告这些独特的变量,因为它们在运行时会发生变化。
-
从虚函数中执行它 - 您知道对象是哪个子类。
-
这是我目前的策略,但它使代码混乱,我希望 c++ 有一些隐藏的技巧可以提供一种更简洁的方法。
-
它不会杂乱无章。你不需要技巧。很清楚——当然,除非你完全误解了这个方法。邮政编码。
标签: c++