2011-06-17 8 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: typeof(typeid)がC++ \ cliで制限されているか、「正しい」systaxがわかりませんか?あなたが書くことができ

+0

は、「コンパイラは、構文エラーを示し、」 - 構文エラーは何ですか? –

+0

申し訳ありませんが、私は初めてそれを言っていませんでした。それは: 1> test.cpp(4):エラーC2059:構文エラー: '、' –

答えて

6

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

良いアイデア!ありがとう! –

関連する問題