c++ - 在 C++ 中是否有替代 dynamic_cast 的方法?

标签 c++ inheritance downcast

我想知道在某些编译器环境中禁用 RTTI 的情况。

用例:

我在我的代码中使用了它并且它在我的机器上运行但在集成测试期间代码无法正常运行,而是崩溃了。

我认为如果 RTTI 不存在,它会返回 null,这在我的代码中已处理,但行为是意外的。

我应该检查什么才能优雅地终止它?

此外,当我使用 dynamic_cast 的包装器(在我们的内部框架中定义)时,它工作正常。该包装器必须采用哪种实现方式才能满足此要求?

最佳答案

陈百强留下精彩link在关于如何检测 RTTI 是否启用的评论中。

要完成此操作,您可以使用以下方法覆盖 dynamic_cast:

#if !defined(RTTI_ENABLED)
    #define dynamic_cast _NullPtrTFn
#endif

template <typename T1, typename T2>
T1* _NullPtrTFn(T2* p)
{
    static_cast<T1*>(p); // try fail to compile (https://godbolt.org/z/hcjKki)
    return static_cast<T1*>(nullptr);
}

关于c++ - 在 C++ 中是否有替代 dynamic_cast 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58547025/

相关文章:

c++ - Gauss-Seidel 函数中的类型无效

c++ - 如何修复编译器错误 "class has no member named X"?

java - 关于从基类扩展的类的问题(Java)

c++ - 如何在 Linux 上查找大型项目的头文件依赖项

c++ - opengl VBO 渲染不能正常工作

c# - 如何使用 C# 在单独运行的 native 进程中调用函数?

c++ - 我可以继承 std::array 并重载 operator [] 吗?

java - 从异常中获取值

c++ - 派生类没有额外的数据成员;将基对象静态向下转换为派生对象是否安全?

java - Java 中的向下转型会抛出 ClassCastException