我可以访问基类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,它负责将“资源”实际委派给每个资源...
this的可能重复。