如何存储和检索正确类型的派生类指针到基类指针映射/从基类指针映射



你好,我有关于映射和继承的问题
我有基类指针的映射:

std::map<int,std::shared_ptr<Game>> GamesByID;

并将派生类指针插入其中,如:

GamesByID.insert(make_pair(ID,std::make_shared<ActionGame>(ID,Title,Metacritic,Recommendations,Price,lvl)));

现在我想用之类的东西来计算我的地图上有多少ActionGame指针


for (auto& e : GamesByID)
{
if(typeid(e) == typeid(SurvivalGame)){
++count;

}else{
cout << typeid(e).name() << "  typeid" <<endl;
}
}

但在映射中只有基类指针,现在我的错误是什么?

映射包含类型为"游戏";与派生类无关,用基类指针存储派生类的名称称为多态性,您将需要一个函数来返回类似于标志的东西,以获取它是什么类型的类。我想说的是,多态性将允许您创建一个具有基类类型的指针变量,该基类可以保存派生类的地址-映射中的指针本身不是派生类对象

class baseClass
{
protected:
string type = "baseClass";
public:
string getClassType()
{
return this->type;
}
}
class derivedClass : public baseClass
{
derivedClass()
{
this->type = "derivedClass";
}
}

这里我给你举了一个例子,基类有一个type变量,你可以在其中存储类型,现在如果你检查baseClass*的类型成员,你会得到一个字符串,告诉你类型,因为变量和返回变量的函数都在基类中

相关内容

  • 没有找到相关文章

最新更新