首页 > 解决方案 > C++从指针调用父虚函数

问题描述

我有这个代码:

void FAuCoreEditorModule::OnAssetEditorOpen(
    UObject* EditObject
  , IAssetEditorInstance* Toolkit)
{
    FName NAme = Toolkit->GetEditorName();
    if(Toolkit->GetEditorName() == "CurveTableEditor")
    {
        FAssetEditorToolkit* AET = static_cast<FAssetEditorToolkit*>(Toolkit);
        AET->FAssetEditorToolkit::RegisterTabSpawners(AET->GetTabManager().ToSharedRef());
    }
}

Toolkit类型ICurveTableEditor

RegisterTabSpawners

是虚函数FAssetEditorToolkit。CurveTableEditor 实现它,但从不调用父级。我想调用父实现,而不修改原始源代码。想出了这个:

FAssetEditorToolkit* AET = static_cast<FAssetEditorToolkit*>(Toolkit);
AET->FAssetEditorToolkit::RegisterTabSpawners(AET->GetTabManager().ToSharedRef());

这合法吗?或者它只是偶然工作?

标签: c++

解决方案


这合法吗?

可能是的。不必要。

IAssetEditorInstance如果是一个非虚明确基FAssetEditorToolkit并且指针确实指向这种类型的对象(或具有这种非虚基的类型),则允许静态向下转换。

如果其中一些限制不满足,您可以使用dynamic_cast代替(只要基础是多态的)。确保检查它是否返回 null 。


推荐阅读