我尝试了这个没有用的方法:
void Map::OnLMClick(short xPos, short yPos)
{
SObject* pSObject = pEditWindow->GetSelectedItem();
if (pSObject==SOTile)
{
/* Do */
我试过这个作为测试:
SObject* EditorWindow::GetSelectedItem()
{
return pSOTile[1]; //pSOTile[1] is a valid pointer, member of EditorWindow
}
SOTile类是基类SObject的子级。因此,是否有可能创建一个Base *来获得其子代之一的返回,然后让程序根据返回的子代做出不同的反应?如果是这种情况,那么我该如何访问它的不是base成员的 child 的成员?
最佳答案
如果您的类型是多态的(即,如果它们至少具有一个虚函数),则可以使用dynamic_cast
:
Base* pObject = get_object(); // May return a pointer to Derived
Derived* pDerived = dynamic_cast<Derived*>(pObject);
请注意,动态低调有时表明设计不佳。尝试考虑在层次结构中更好地安排虚拟功能是否会有所帮助。
在不了解具体应用 Realm 的情况下,我不可能给出更具体的建议。