c++ - 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());
这合法吗?或者它只是偶然工作?
解决方案
这合法吗?
可能是的。不必要。
IAssetEditorInstance
如果是一个非虚明确基FAssetEditorToolkit
并且指针确实指向这种类型的对象(或具有这种非虚基的类型),则允许静态向下转换。
如果其中一些限制不满足,您可以使用dynamic_cast
代替(只要基础是多态的)。确保检查它是否返回 null 。
推荐阅读
- android - 导航 2.4.0-alpha03 上的“java.lang.String kotlin.text.CharsKt.titlecase(char, java.util.Locale)”错误(包括 nav_graph)
- javascript - 从 ISO8601 [Python 3.9] 解析为 datetime 对象时的时间不正确
- python - 使用带有 FastAPI 的 POST 时缺少值错误
- bash - 用于作业输出的 GitHub Action 构建命令
- mysql - 如何在多列上添加自定义条件约束
- java - System.out.flush 在 Apache Netbeans IDE 中不起作用?
- python - 如何使用 sqlalchemy 将值插入具有序列号的 postgresql 数据库
- powerbi - 如何将 Power BI 报表放入每次打开都会刷新的 PowerPoint 中?
- python - Pygame如何限制输入框中的字符数?
- php - php 7.4 安装失败 - E: Unable to locate package php7.4