C++获取所有继承类信息的方法
C++ a way to get all inherited classes info
所以我有这部分代码
class Robot
{
public: string Name;
public: explicit Robot(const string& Name) { this->Name = Name; }
public: Robot() { Name = "Robotic"; }
public: virtual ~Robot() = default;
public: virtual vector<string> GetCapabilities() = 0;
public: friend ostream& operator << (ostream&, const Robot&);
};
class TalkingRobot : virtual public Robot
{
public: explicit TalkingRobot(const string& Name) { this->Name = Name; }
public: virtual ~TalkingRobot() = default;
public: vector<string> GetCapabilities() { return { "Talking" }; }
};
class WalkingRobot : virtual public Robot
{
public: explicit WalkingRobot(const string& Name) { this->Name = Name; }
public: virtual ~WalkingRobot() = default;
public: vector<string> GetCapabilities() { return { "Walking" }; }
};
class VaxBot : public TalkingRobot, public WalkingRobot
{
public: explicit VaxBot(const string& Name):TalkingRobot(Name), WalkingRobot(Name) { this->Name = Name; }
public: virtual ~VaxBot() = default;
public: vector<string> GetCapabilities() { return { "Talking","Walking" }; }
};
他们有一个虚拟函数GetCapabilites((。
有没有办法在我的 VaxBot 类中重写 GetCapabilites(( 以返回所有继承的类返回值,这样我就不必像在这里那样显式编写它们?
在标准C++中没有一个简单的单行方法来实现这种事情。 例如,派生类无法遍历其所有基类,并调用每个基中的某个成员函数来收集结果,而无需单独显式命名所有基/成员。
可以调用继承的函数,并将其结果收集到单个向量中。 例如;
std::vector<std::string> VaxBot::GetCapabilities()
{
std::vector<std::string> values(TalkingRobot::GetCapabilities());
std::vector<std::string> more_values(WalkingRobot::GetCapabilities());
values.insert(values.end(), more_values.begin(), more_values.end());
return values;
}
如果您有两个以上的此类基础,则可以扩展上述内容。 这意味着显式复制代码,但正如我在开头段落中所说,没有办法隐式实现这种机制。
你的代码还有其他问题,但你还没有问过这些问题,所以我不会解决它们。 而且,为了便于阅读,不要在每一行都使用文本public:
。 发布不必要的不可读代码是减少获得有用帮助的机会的有效方法,因为它会让其他人感到不安。
class Robot
{
public: string Name;
public: vector<string> Capabilities;
public: explicit Robot(const string& Name) { this->Name = Name; }
public: Robot() { Name = "Robotic"; }
public: virtual ~Robot() = default;
public: vector<string> GetCapabilities() { return this->Capabilities; }
public: friend ostream& operator << (ostream&, const Robot&);
};
class TalkingRobot : virtual public Robot
{
public: explicit TalkingRobot(const string& Name) {
this->Name = Name;
this->Capabilities.push_back("Talking");
}
public: virtual ~TalkingRobot() = default;
};
class WalkingRobot : virtual public Robot
{
public: explicit WalkingRobot(const string& Name) {
this->Name = Name;
this->Capabilities.push_back("Walking");
}
public: virtual ~WalkingRobot() = default;
};
class VaxBot : public TalkingRobot, public WalkingRobot
{
public: explicit VaxBot(const string& Name):TalkingRobot(Name), WalkingRobot(Name) { this->Name = Name; }
public: virtual ~VaxBot() = default;
};
可以利用多个继承构造函数来存储功能。
相关文章:
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 调用具有未标识类型的类的方法
- 是否可以使用基类非虚拟方法中的派生类虚拟方法?
- 如何访问存储在 std::variant 中的类的方法
- 如何将类成员方法的参数列表自动填充写入可变参数?
- 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- C ++类型特征:确保子类实现方法
- 静态 std::map instatiation 在类的方法中调用构造函数吗?
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 将一个类的方法指针存储到另一个类中
- 通过基类接受方法转发派生 UniquePtr 的右值会移动引用而不是复制
- 从内部类中的方法从包含类调用方法
- 对纯抽象类中方法的未定义引用
- 如何在该接收类之外声明嵌套类的方法
- C++初始化之前派生类调用基类的方法
- 如果类"A"具有指向另一个类的指针,则"B" A 可以访问 B 类公共方法
- 为什么派生类的实例从基类调用方法?
- 使用包含互斥锁的类的方法实例化 cpp11 线程
- 类的方法和对象。参考?智能指针?简单的初始化?
- C++获取所有继承类信息的方法