Я где-то читал в MSDN, что эквивалент ключевого слова С# будет "dynamic_cast", но это не совсем эквивалентно: он не работает со значениями типов или с общими параметрами. Например, в С# я могу написать:
void MyGenericFunction<T>()
{
object x = ...
if (x is T)
...;
}
Если я попробую "эквивалентный" С++/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()))
Есть ли более простой способ сделать это?