【发布时间】:2009-04-03 07:17:35
【问题描述】:
我在 MSDN 上的某处读到,与 C# 的“is”关键字等效的是 dynamic_cast,但这并不是真正等效的:它不适用于值类型或泛型参数。例如在 C# 中我可以写:
void MyGenericFunction<T>()
{
object x = ...
if (x is T)
...;
}
如果我尝试“等效”C++/CLI:
generic<class T>
void MyGenericFunction()
{
object x = ...
if (dynamic_cast<T>(x))
...;
}
我收到编译器错误“错误 C2682:无法使用 'dynamic_cast' 将 'System::Object ^' 转换为 'T'”。
我唯一能想到的就是使用反射:
if (T::typeid->IsAssignableFrom(obj->GetType()))
有没有更简单的方法来做到这一点?
【问题讨论】:
标签: c++-cli