Я где-то читал в MSDN, что эквивалентом ключевого слова "#" в C # будет 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()))
Есть ли более простой способ сделать это?