我有一个玩家类,有:
typedef string cptype;
map <cptype, unique_ptr<Cp> > Cps;
我添加了一个指向此地图的指针:
Cps.insert(make_pair("Pos", unique_ptr<Cp>(new PosCp())));
现在当我尝试使用以下方法访问PosCp的pos成员变量时:
Cps["Pos"]->pos = sf::Vector2f(0, 0);
我收到错误:
class Cp has no member pos
当我尝试使用dynamic_cast
时,使用以下内容:
dynamic_cast<PosCp*>(Cps["Pos"])->pos = sf::Vector2f(0, 0);
我收到错误:
cannot dynamic_cast [this object]
(理所当然,我不想改变指针,我只是想访问成员变量)
如何在不更改地图中指针类型的情况下访问成员pos
?
以下是Cp
和PosCp
类:
class Cp
{
public:
Cp();
virtual ~Cp();
cptype type;
};
class PosCp : public Cp
{
public:
PosCp();
~PosCp();
sf::Vector2f pos;
};
答案 0 :(得分:3)
你可以试试这个:
if (PosCp * p = dynamic_cast<PosCp *>(Cps["Pos"].get()))
{
p->pos = sf::Vector2f(0, 0);
}
else
{
// most-derived type of *Cps["Pos"] is not PosCp
}