__try_cast
Примечание Этот раздел относится только к версии 1 статьи "Управляемые расширения для C++". Приведенный здесь синтаксис должен использоваться только для обслуживания кода версия 1. Сведения об использовании аналогичных функциональных возможностей в новом синтаксисе см. в разделе safe_cast.
Выполняет указанное приведение или вызывает исключение в случае сбоя приведения.
__try_cast < type-id > ( expression )
Заметки
Ключевое слово __try_cast (его поведение аналогично dynamic_cast) обеспечивает поддержку автоматического создания исключения (типа System::InvalidCastException) в случае сбоя указанной операции приведения.
Ключевое слово __try_cast можно использовать на этапе тестирования приложения для автоматического оповещения о возможных ошибках приведения.
При переносе управляемых расширений для C++ следует заменить вызовы __try_cast вызовами safe_cast.
Ключевое слово __try_cast не работает в случае приведения указателя к типам значения (__value), поскольку проверка типов во время выполнения невозможна.
Пример
В следующем примере производится попытка выполнить приведение типа указатель (типа Derived ) к типу другого указателя (типа MoreDerived). В случае сбоя приведения оно перехватывается блоком catch, который выводит сообщение.
// keyword__try_cast.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
using namespace System;
__gc struct Base {};
__gc struct Derived : Base {};
__gc struct MoreDerived : Derived {};
int main() {
Base*bp = new Derived;
try {
MoreDerived* mdp = __try_cast<MoreDerived*>(bp);
}
catch(System::InvalidCastException*) {
Console::WriteLine("Could not cast 'bp' to MoreDerived*");
}
}
Вывод
Could not cast 'bp' to MoreDerived*