Существует ли простой способ проверить тип объекта? Мне нужно что-то вдоль следующих строк:
MyObject^ mo = gcnew MyObject();
Object^ o = mo;
if( o->GetType() == MyObject )
{
// Do somethine with the object
}
else
{
// Try something else
}
В данный момент я использую вложенный поиск блоков try-catch System::InvalidCastException
s, который чувствует себя ужасным, но работы. Я собирался попытаться представить что-то как код выше, чтобы видеть, быстрее ли это так/медленнее/читаемо, но не может разработать синтаксис для ровной попытки.
В случае, если чье-либо удивление, это прибывает из наличия единственной очереди, вводящей поток, который снабдил данными, чтобы продолжить работать. Иногда я хочу изменить настройки и передачу их на пути, очередь данных является простым способом сделать так.
Вы можете использовать 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
}
Вы должны проверить Как: Реализация ключевых слов is и as C# в C++:
В этой теме показано, как реализовать функциональность ключевых слов is и as C# в Visual C++.
edit: Я оставлю это здесь. Но этот ответ для C++. Возможно, он даже не имеет отношения к тому, как это сделать для CLI.
Вам нужно скомпилировать с включенным RTTI (Run Time Type Information). Затем посмотрите статью в википедии http://en.wikipedia.org/wiki/Run-time_type_information и поищите RTTI в google. Вам должно подойти.
С другой стороны, вы можете захотеть иметь виртуальный базовый класс для всех ваших классов данных с переменной-членом, которая описывает, какой это тип.