在c++中有dynamic_cast的替代方案吗
Is there any alternative to dynamic_cast in c++?
如果RTTI在某些编译器环境中被禁用,我想知道这一点。
用例:
我在代码中使用了它,它在我的机器上运行,但在集成测试期间,代码未能正常运行,而是崩溃了。
我以为它会返回null,以防我的代码中处理的RTTI不在那里,但行为出乎意料。
我应该检查什么才能优雅地终止它?
此外,当我使用dynamic_cast的包装器(在我们的内部框架中定义(时,它工作得很好。包装器需要什么样的实现才能满足这个要求?
Raymond Chen在评论中留下了一个关于如何检测是否启用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);
}
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 如何理解C++标准N3337中的expr.const.cast子句8
- C++Cast运算符过载
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- C++11 中不同类型的对象的 std::array 的替代方案
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?