为了多态性,指向向量的指针-C++
Pointer to vector for sake of polymorphism - C++
我正在开发一款基于OpenGL的游戏,在寻找一种将实体信息传递给渲染和网络功能的稳健方法时,出现了这个问题。
类似这样的东西:
vector <DynamicEntity> DynamicEntities;
vector <StaticEntity> StaticEntities;
vector <Entity> *Entities;
Entities.push_back(&DynamicEntities);
Entities.push_back(&StaticEnt);
Graphics.draw(Entities);
Server.bufferData(Entities);
Graphics.draw和Server.bufferData所需的唯一信息由Entity包含,DynamicEntity和StaticEntity都继承自Entity。
我知道这会起作用:
vector <Entity*> Entities;
for(uint32_t iEntity=0;iEntity<iNumEntities;iEntity++)
{
Entities.push_back(&DynamicEntities[iEntity])
}
//(ad nauseam for other entity types)
但这似乎效率极低,而且必须考虑到随着游戏的进行实体数量的变化。我对数据结构的基础知之甚少;所以这可能是一个愚蠢的问题,但我希望能有一些见解。
与绘制图形的成本相比,您显示的for循环中的复制操作可能太快,无法测量。通过在循环之前执行Entities.resize(...)
并在循环中使用数组索引,可以使其更快。
您在问题的第一部分提出的解决方案将不起作用,因为vector<StaticEntity>
的数据布局可能与vector<DynamicEntity>
的布局不同。对象的数组不是多态的,vector<>
管理的存储本质上是一个有一些动态管理的数组
事实上,由于矢量存储类似于数组,如果用数组索引替换push_back
,for
循环的主体将编译为类似于的内容
*p1++ = p2++;
编译器甚至可以自动向量化!
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 使用向量类的c++指针
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何更改唯一指针向量的可见性
- C++ 独特指针练习的向量
- C 中的向量指针的清晰图
- 当向量位于内部类中时,如何删除指向对象的向量指针
- std::向量指针
- 指向结构体的向量指针错误
- 删除指向指针的向量指针时出错
- 映射不同类型的向量指针
- 在c++中传递向量指针
- 虚拟类的向量:指针是干净的方法吗
- 如何从另一个向量/对象集构造新的向量/指针集
- 模型视图控制器- c++向量指针,太多的传递
- 为什么向量指针占用这么多内存?
- 删除条目向量指针的静态映射c++
- 复向量指针
- c++数组向量指针的初始化