相关疑难解决方法(0)

C++/CLI-问题:是否有与C#"is"关键字相同的或者我是否必须使用反射?

我在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

13
推荐指数
2
解决办法
7649
查看次数

标签 统计

c++-cli ×1