在C ++ / CLI代码中,我需要检查类型是否是特定的泛型类型。在C#中它将是:
public static class type_helper {
public static bool is_dict( Type t ) {
return t.IsGenericType
&& t.GetGenericTypeDefinition() == typeof(IDictionary<,>);
}
}
但在cpp ++ \ cli中它的工作方式不同,编译器会显示语法错误:
class type_helper {
public:
static bool is_dict( Type^ t ) {
return t->IsGenericType && t->GetGenericTypeDefinition()
== System::Collections::Generic::IDictionary<,>::typeid;
}
};
我找到的最好方法是比较这样的字符串:
class type_helper {
public:
static bool is_dict( Type^ t ) {
return t->IsGenericType
&& t->GetGenericTypeDefinition()->Name == "IDictionary`2";
}
};
有人知道更好的方法吗?
PS: 是c ++ \ cli中typeof(typeid)的限制还是我不知道“正确”的systax?
答案 0 :(得分:6)
你可以写:
return t->IsGenericType
&& t->GetGenericTypeDefinition() == System::Collections::Generic::IDictionary<int,int>::typeid->GetGenericTypeDefinition();