从基类到派生类的动态转换,以访问方法

问题描述 投票:0回答:1

我可以访问基类PlayerBase,从该基类派生了类Player。还存在另一个类GameEventHandler,该类负责使用方法GameEventhandler::ModifyResource将实际“资源”委派给每个玩家:

bool GameEventHandler::modifyResource(std::shared_ptr<Course::PlayerBase> player,
                                      Course::BasicResource resource,
                                      int amount)
{

}

但是,您可以看到,该方法的实现完全由我决定。

问题如下:仅派生类Player具有方法Player::increaseResource,该方法可以增加其资源之一。但是,方法modifyResource将指向PlayerBase对象的共享指针作为参数。这意味着,为了访问方法Player::increaseResource,我将不得不将Playerbase类型的指针强制转换为Player类型的指针,或者执行其他一些技巧。

[如何处理这种情况?我已经尝试过类似的东西

std::shared_ptr<Player> ownPlayerPtr
    = dynamic_cast<std::shared_ptr<Player>>(player);

但是这会导致错误std::shared_ptr<Player>是对指针的引用。更改为

std::shared_ptr<Player> ownPlayerPtr
    = dynamic_cast<std::shared_ptr<Player>&>(player);

给出错误消息'std::shared_ptr<Course::PlayerBase>' is not polymorphic = dynamic_cast<std::shared_ptr<Player>&>(player);

关于为什么会发生这种情况以及我需要采取什么措施来解决此问题的任何想法?

我可以访问基类PlayerBase,从该基类派生了Player类。还有另一个类GameEventHandler,它负责将“资源”实际委派给每个资源...

c++ polymorphism c++14 dynamic-cast
1个回答
0
投票

this的可能重复。

© www.soinside.com 2019 - 2024. All rights reserved.