我使用动态强制转换来保证安全:
这是我用指针编写的代码:
XYZ xyz = dynamic_cast<XYZ*>(abc);
if (xyz == nullptr)
{
// TODO handle error
}
现在有办法做同样的事情,但有参考:
XYZ& xyz = dynamic_cast<XYZ&>(abc);
if (xyz == nullptr)
{
// TODO handle error
}
这段代码没有编译,但我想问有没有办法以类似的方式做到这一点。
答案 0 :(得分:6)
dynamic_cast
会在失败时抛出异常。要处理失败,请捕获异常:
try {
XYZ& xyz = dynamic_cast<XYZ&>(abc);
}
catch (std::bad_cast& e) {
//handle error
}
答案 1 :(得分:3)
是的,但是由于您正在转向参考,nullptr
不是可能的结果。相反,如果动态类型abc
无法转换为XYZ
,则广告会投放std::bad_cast
。