考虑以下代码:
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/