2011-06-17 59 views
4

在C++/CLI代碼中,我需要檢查類型是否是特定的泛型類型。在C#這將是:如何檢查C++/CLI中的泛型類型?

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

「編譯器顯示了語法錯誤」 - 是什麼語法錯誤? –

+0

對不起,我沒有第一次說。它是: 1> test.cpp(4):錯誤C2059:語法錯誤:',' –

回答

6

你可以寫:

return t->IsGenericType 
    && t->GetGenericTypeDefinition() == System::Collections::Generic::IDictionary<int,int>::typeid->GetGenericTypeDefinition(); 
+0

好主意!謝謝! –