我有4个类:Foundation
,FoundationWidget
,Game
和GameWidget
。 FoundationWidget
延伸Foundation
和GameWidget
延伸Game
。C++ std :: array cast
Game
还包含Foundation
秒的标准::阵列和GameWidget
包含FoundationWidget
秒的标准::阵列。 Game
也包含一个虚拟方法,它应该返回指向数组Foundation
s的指针。 GameWidget
通过返回指向其FoundationWidget
的数组的指针覆盖此方法。 目前(非工作)的实现看起来是这样的:
class Game {
std::array<Foundation, 4> foundations;
private:
virtual std::array<Foundation, 4>* get_foundations() {
return &this->foundations;
}
}
class GameWidget : public Game {
std::array<FoundationWidget, 4> foundations;
private:
std::array<Foundation, 4>* get_foundations() {
return &this->foundations;
}
}
我期望这个工作,因为它是与类相同大小的阵列,扩展指定为返回类型的人,而是我收到这个错误:cannot convert ‘std::array<FoundationWidget, 4ul>*’ to ‘std::array<Foundation, 4ul>*’ in return
。
我也试着将类属性声明为指针数组,但结果是一样的。 static_cast或dynamic_cast都没有帮助。
我在这里错过了什么?有没有什么方法来投射数组?如果不是,我可以使用一些建设来获得相同的结果,即“虚拟”类成员吗?
如果'FoundationWidget'从'Foundation'继承为什么不只是有一个'的std ::阵列<基金会*,4>'(或'其他一些指针类型GameWidget'? – NathanOliver
也,你回来'STD :: array *'这是一个指针类型,如果你正在考虑类似getter的东西,你应该小心不要返回一个临时/局部变量的指针 –
@NathanOliver谢谢你的评论。已经解决了这个问题,但是我仍然对这个演员感兴趣 – sveatlo