我在MSDN上的某个地方读过,相当于C#的"is"关键字将是dynamic_cast,但这并不是真正等效的:它不适用于值类型或泛型参数.例如在C#中我可以写:
void MyGenericFunction<T>()
{
object x = ...
if (x is T)
...;
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试"等效"C++/CLI:
generic<class T>
void MyGenericFunction()
{
object x = ...
if (dynamic_cast<T>(x))
...;
}
Run Code Online (Sandbox Code Playgroud)
我得到一个编译器错误"错误C2682:不能使用'dynamic_cast'从'System :: Object ^'转换为'T'".
我唯一能想到的就是使用反射:
if (T::typeid->IsAssignableFrom(obj->GetType()))
Run Code Online (Sandbox Code Playgroud)
有更简单的方法吗?
c++-cli ×1