MSDN のどこかで、C# の "is" キーワードに相当するものは dynamic_cast になると読んだことがありますが、実際には同等ではありません。値の型やジェネリック パラメーターでは機能しません。たとえば、C# では次のように記述できます。
void MyGenericFunction<T>()
{
object x = ...
if (x is T)
...;
}
「同等の」C++/CLI を試してみると、次のようになります。
generic<class T>
void MyGenericFunction()
{
object x = ...
if (dynamic_cast<T>(x))
...;
}
「エラー C2682: 'dynamic_cast' を使用して 'System::Object ^' から 'T' に変換できません」というコンパイラ エラーが発生します。
私が考えることができる唯一のことは、リフレクションを使用することです:
if (T::typeid->IsAssignableFrom(obj->GetType()))
これを行う簡単な方法はありますか?