__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*