//dynamic_cast_clr.cpp
using namespace System; //引用命名空间
void PrintObjectType(Object ^o) //声明托管对象 Object ^ o
{
if (dynamic_cast<String ^>(o)) // 通过dynamic_cast 进行类型转化
Console::WriteLine("Object is a String"); //输出字符串
else if (dynamic_cast<int ^>(o))
Console::WriteLine("Object is an int");
}
int main()
{
Object ^o1 = "hello";
Object ^o2 = 10;
PrintObjectType(o1);
PrintObjectType(o2);
return 0;
}
//编译: cl /clr dynamic_cast_clr.cpp
示例代码来自:https://msdn.microsoft.com/en-us/library/cby9kycs.aspx
通过 dynamic_cast<dst>(src) 可以将源对象转换为目标对象
如果 src 与 dst 来自同一个继承树 或 dst = void *,才能进行正确的转化
否则返回 NULL (nullptr in VS)
比如:
class A {};
class B : public A {};
A * pa = new A();
B * pb = dynamic_cast<B *>(pa); //OK, downcast
//or like this
B * pb = new B();
A * pa = dynamic_cast<A *>(pb); //OK, upcast
//also
A * pa = pb; //隐式转换