Pregunta

¿Hay una forma sencilla de comprobar el tipo de un objeto? Necesito algo a lo largo de las siguientes líneas:

MyObject^ mo = gcnew MyObject();
Object^ o = mo;

if( o->GetType() == MyObject )
{
    // Do somethine with the object
}
else
{
    // Try something else
}

En el momento en que estoy usando bloques try-catch anidados en busca de System::InvalidCastExceptions que se siente feo, pero funciona. Iba a tratar de perfil algo así como el código anterior para ver si es más rápido / lento / legible, pero no puede llegar a la sintaxis a intentarlo.

En caso de que alguien se está preguntando, esto viene de tener una sola cola de entrar en un hilo que suministran datos a trabajar. De vez en cuando quiero cambiar la configuración y pasar a través de ellos en la cola de datos es una forma sencilla de hacerlo.

¿Fue útil?

Solución

Puede utilizar MyObject::typeid en C ++ / CLI de la misma manera que typeof(MyObject) se utiliza en C #. Código de abajo descaradamente copiado de su pregunta y modificado ...

MyObject^ mo = gcnew MyObject();
Object^ o = mo;

if( o->GetType() == MyObject::typeid )
{
    // Do somethine with the object
}
else
{
    // Try something else
}

Otros consejos

Debe retirar Cómo: Implementar y es como C # Palabras clave en C ++ :

  

En este tema se muestra cómo implementar la funcionalidad de la SI y C # como palabras clave en Visual C ++.

editar Voy a dejar esto aquí. Pero esta respuesta es para C ++. Probablemente ni siquiera ligeramente relacionada con hacer esto por la CLI.

Se necesita compilar con RTTI (Run Time Tipo de información) sobre. Luego, busquen en el artículo de Wikipedia http://en.wikipedia.org/wiki/Run-time_type_information y búsqueda en google de RTTI. En caso de trabajar para usted.

Por otro lado es posible que desee tener una clase base virtual para todas las clases de datos con una variable miembro que describe qué tipo es.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top