Как проверить тип объекта в C++ / CLI?

Существует ли простой способ проверить тип объекта? Мне нужно что-то вдоль следующих строк:

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

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

В данный момент я использую вложенный поиск блоков try-catch System::InvalidCastExceptions, который чувствует себя ужасным, но работы. Я собирался попытаться представить что-то как код выше, чтобы видеть, быстрее ли это так/медленнее/читаемо, но не может разработать синтаксис для ровной попытки.

В случае, если чье-либо удивление, это прибывает из наличия единственной очереди, вводящей поток, который снабдил данными, чтобы продолжить работать. Иногда я хочу изменить настройки и передачу их на пути, очередь данных является простым способом сделать так.

12
задан AProgrammer 9 March 2010 в 16:42
поделиться

3 ответа

Вы можете использовать MyObject :: typeid в C ++ / CLI так же, как typeof (MyObject) используется в C #. Код ниже беззастенчиво скопирован из вашего вопроса и изменен ...

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

if( o->GetType() == MyObject::typeid )
{
    // Do somethine with the object
}
else
{
    // Try something else
}
27
ответ дан 2 December 2019 в 04:08
поделиться

Вы должны проверить Как: Реализация ключевых слов is и as C# в C++:

В этой теме показано, как реализовать функциональность ключевых слов is и as C# в Visual C++.

9
ответ дан 2 December 2019 в 04:08
поделиться

edit: Я оставлю это здесь. Но этот ответ для C++. Возможно, он даже не имеет отношения к тому, как это сделать для CLI.

Вам нужно скомпилировать с включенным RTTI (Run Time Type Information). Затем посмотрите статью в википедии http://en.wikipedia.org/wiki/Run-time_type_information и поищите RTTI в google. Вам должно подойти.

С другой стороны, вы можете захотеть иметь виртуальный базовый класс для всех ваших классов данных с переменной-членом, которая описывает, какой это тип.

0
ответ дан 2 December 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: