c++ - 从基指针容器访问派生成员

标签 c++ casting polymorphism containers

考虑以下代码:

struct Object
{
bool hasComponent(std::string sComponentID);
Component& getComponent(std::string sComponentID);
std::vector<Component*> vComponents;
}

struct System
{
std::vector<Object*> vObjects;
}

我的系统将遍历其 vector 中的每个对象,并且需要从组件的派生成员访问数据(它们都包含不同的状态和数据供系统使用)。 我考虑过这样的事情:

struct NetworkComponent : Component
{
std::string sID;
NetworkComponent(std::string tempID) : sID(tempID) {};

//Network data here
}

for(Object* p : vObjects)
{
     if(p->hasComponent("network")
     {
     NetworkComponent& network = static_cast<NetworkComponent&>(p->getComponent("network");
     //Access the data in the structure and do stuff with it.
     }
}

然而,这确实感觉非常“hacky”;更不用说不安全了。 我想知道是否有更好的方法来做这样的事情,或者至少将来如何避免这个问题?

有没有关于这个主题的好文章可供我查阅? 编辑:dynamic_cast 不是一个选项,因为它很慢。

最佳答案

听起来您正在尝试重新发明 dynamic_cast

关于c++ - 从基指针容器访问派生成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25306612/

相关文章:

c++ - Ostream << 和 operator -= 用于类?

swift - 转换会删除 Swift 中所有级别的 Optional 吗?

java - Java中有类似JavaScript的 "prototype"的东西吗?

c++ - 在 C++ 中,使用 luabind,调用 lua 文件中定义的函数?

c++ - 如何在 bazel 中同时处理外部依赖项和我的项目?

c++ - 对 nvcpl.dll 的 NvCplGetThermalSettings 调用返回 false (C++)

c++ - reinterpret_cast for 'serializing' 数据,接收端的字节顺序和对齐方式

c++ - 为什么不使用强制转换语法调用 "operator void"?

C++ - 在基于磁盘的 vector 中管理引用

c++ - 用于多态处理对象的 oop 设计