动态转换为引用

时间:2014-06-09 17:09:33

标签: c++ dynamic-cast reference-type

我使用动态强制转换来保证安全:

这是我用指针编写的代码:

XYZ xyz = dynamic_cast<XYZ*>(abc);
if (xyz == nullptr)
{
    // TODO handle error
}

现在有办法做同样的事情,但有参考:

XYZ& xyz = dynamic_cast<XYZ&>(abc);
if (xyz == nullptr)
{
    // TODO handle error
}

这段代码没有编译,但我想问有没有办法以类似的方式做到这一点。

2 个答案:

答案 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