C ++ / CLI中的安全转换 - 相当于C#的“as”?

时间:2011-07-21 20:36:37

标签: c# casting c++-cli

之前我曾问过在C#中使用as是否安全(即不会爆炸):Is using "as" in C# a safe way of casting?

我喜欢这个答案并最终使用了基于它的东西:

Foo x = y as Foo;
if (x != null)
{
    ...
}

但是现在我将我的C#代码转换为C ++ / CLI(由于依赖问题......)所以问题就是......

我正在寻找相当于“as”的C ++ / CLI,这是安全的,如果类型不正确,也不会在运行时爆炸。任何人都可以建议一个满足我需求的演员吗? (如果可以,请提供一个例子)

谢谢!

3 个答案:

答案 0 :(得分:12)

执行此类操作的C ++方法是dynamic_cast。我不知道托管引用和非托管引用是否相同,MSDN对它的信息很少。

答案 1 :(得分:1)

答案 2 :(得分:0)

在编译C ++时需要一些名为RTTI的东西。 然后,您可以使用dynamic_cast(提供类似于as的null)和typeid(类似于is)。