Sdílet prostřednictvím


__try_cast

 

Publikováno: duben 2016

Poznámka   Toto téma se týká pouze verze 1 spravovaných rozšíření jazyka C++. Tato syntaxe by měla sloužit pouze k udržování kódu verze 1. Viz safe_cast (C++ Component Extensions) informace o použití ekvivalentní funkce v nové syntaxi.

Provede zadané přetypování nebo vyvolá výjimku, pokud přetypování selže.

Syntaxe

__try_cast <
 type-id
 >
(
expression 
)

Poznámky

__try_cast Klíčové slovo (podobně jako v chování dynamic_cast) poskytuje podporu pro automaticky vyvolání výjimky (typu System::InvalidCastException) vždy, když dojde k selhání operace zadané přetypování.

__try_cast Během fáze testování vaší aplikace, automaticky upozorňování na selhání možné přetypování lze použít klíčové slovo.

Když portování spravovaných rozšíření jazyka C++, vyměňte __try_cast volání s safe_cast (C++ Component Extensions).

__try_cast nefunguje v přetypování ukazatele na typy hodnot (__value), protože není možné zkontrolovat typy za běhu.

Příklad

V následujícím příkladu, pokus o přetypovat ukazatel (z Derived typu) k jinému ukazateli (z MoreDerived typu) se provádí. Pokud přetypování selže, je zachycena a hlášené blok 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*");
   }
}

Výstup

Could not cast 'bp' to MoreDerived*