Share via


__try_cast

 

発行: 2016年4月

メモ   このトピックは、C++ マネージ拡張のバージョン 1 にのみ対応しています。 この構文は、バージョン 1 のコードを保守するためだけに使用してください。 参照してください safe_cast (C++ Component Extensions) については、新しい構文で同等の機能を使用します。

指定したキャストを実行します。キャストが失敗した場合は、例外をスローします。

構文

__try_cast <
 type-id
 >
(
expression 
)

解説

__try_cast キーワード (に似た動作をする dynamic_cast) 自動的に例外をスローするためのサポートを提供 (型の system::invalidcastexception) 指定されたキャスト操作が失敗するたびにします。

__try_cast キーワードは、アプリケーションのテスト フェーズで使用でき、考えられるキャストの失敗を自動的に警告します。

C++ マネージ拡張を移植するときに置換 __try_cast を呼び出し、 safe_cast (C++ Component Extensions)です。

実行時に型をチェックすることはできないため、__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*