I've read somewhere on MSDN that the equivalent to C#'s "is" keyword would be dynamic_cast, but that's not really equivalent: It doesn't work with value types or with generic parameters. For example in C# I can write:
void MyGenericFunction<T>()
{
object x = ...
if (x is T)
...;
}
If I try the "equivalent" C++/CLI:
generic<class T>
void MyGenericFunction()
{
object x = ...
if (dynamic_cast<T>(x))
...;
}
I get a compiler error "error C2682: cannot use 'dynamic_cast' to convert from 'System::Object ^' to 'T'".
The only thing I can think of is to use reflection:
if (T::typeid->IsAssignableFrom(obj->GetType()))
Is there a simpler way to do this?
It's on MSDN:
How to: Implement is and as C# Keywords in C++
In a nutshell, you need to write a helper function like so:
template < class T, class U >
Boolean isinst(U u) {
return dynamic_cast< T >(u) != nullptr;
}
and call it like this:
Object ^ o = "f";
if ( isinst< String ^ >(o) )
Console::WriteLine("o is a string");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With