c++ - 有没有办法将两个或多个不同的类链接到一个类中(然后在向量上使用)?
问题描述
所以我基本上是在尝试链接两个不同的类并在同一个向量中使用它们。例如,如果我有一个名为“CPlayer”的类和另一个名为“Cenemy”的类,它们具有不同的元素但原理相同,我如何将它可能链接到一个名为“CEntity”的类中?我想避免混乱和硬代码。
解决方案
@IgorTandetnik 是对的,多态是解决方案。我在此处发布了一个描述性片段,以在您学习这个有趣的主题时指导您的想法。
emum entity_type_enum { PLAYER, ENEMY };
struct CEntity
{
CEntity(void) { /**/ }
virtual ~CEntity(void) { /**/ }
virtual entity_type_enum id(void) = 0;
};
struct CPlayer : public CEntity
{
CPlayer(void) { /**/ }
virtual ~CPlayer(void) { /**/ }
entity_type_enum id(void) { return PLAYER; }
};
struct CEnemy : public CEntity
{
CEnemy(void) { /**/ }
virtual ~CEnemy(void) { /**/ }
entity_type_enum id(void) { return ENEMY; }
};
std::vector<CEntity*> objects;
objects.push_back(new CEnemy());
objects.push_back(new CPlayer());
获取实际的玩家或敌人
auto *ptr = objects[0];
if (ptr->id() == ENEMY)
{
auto *E = dynamic_cast<CEnemy*>(ptr);
// do something with enemy...
}
if (ptr->id() == PLAYER)
{
auto *P = dynamic_cast<CPlayer*>(ptr);
// do something with player...
}
并清理
for (auto *ptr : objects) delete ptr;
objects.clear();
推荐阅读
- c# - 从 DbContext 检索数据时如何正确使用“使用”语句
- javascript - Wordpress - 如何在 Javascript 变量中获取 Post_ID() 和回显?
- php - 添加两个数组变量
- perl - 在 perl 中循环从 InfluxDB::HTTP 返回的数据结构
- css - Bootstrap 4.3.1 样式在小屏幕上丢失
- python - 如果我进行一次热编码,我是否总是需要保留一份训练数据的副本?
- sparql - 通过 sparql 从 wikidata 中提取同义词
- javascript - 将一个数组与另一个数组进行比较,以确保第二个数组不包含不同的值
- java - 使用数组将 CSV 列调用到 java 程序中
- c++ - 为什么我们在这里创建了两个 pq?