首页 > 解决方案 > 有没有办法将两个或多个不同的类链接到一个类中(然后在向量上使用)?

问题描述

所以我基本上是在尝试链接两个不同的类并在同一个向量中使用它们。例如,如果我有一个名为“CPlayer”的类和另一个名为“Cenemy”的类,它们具有不同的元素但原理相同,我如何将它可能链接到一个名为“CEntity”的类中?我想避免混乱和硬代码。

标签: c++classvector

解决方案


@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();

推荐阅读