我尝试了这个没有用的方法:

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 的情况下,我不可能给出更具体的建议。

07-24 09:45