12

オブジェクトのタイプを確認する簡単な方法はありますか?私は次の線に沿って何かが必要です:

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を探しています。上記のコードのようなものをプロファイリングして、それがより速い/遅い/読みやすいかどうかを確認しようとしましたが、構文を理解することさえできません。

誰かが不思議に思うかもしれませんが、これは、作業するデータを提供するスレッドに単一のキューが入ることから生じます。ときどき設定を変更したいのですが、データキューを介して設定を渡すのは簡単な方法です。

4

3 に答える 3

28

C ++ / CLIでは、C#で使用するMyObject::typeidのと同じ方法で使用できます。typeof(MyObject)以下のコードは、あなたの質問から恥知らずにコピーされ、変更されました...

MyObject^ mo = gcnew MyObject();
Object^ o = mo;

if( o->GetType() == MyObject::typeid )
{
    // Do somethine with the object
}
else
{
    // Try something else
}
于 2010-03-11T09:51:04.703 に答える
9

方法を確認する必要があります: C ++でのC#キーワードとしての実装

このトピックでは、Visual C++でisおよびasC#キーワードの機能を実装する方法を示します。

于 2010-03-09T16:43:10.147 に答える
0

編集:これはここに残しておきます。しかし、この答えはC++用です。おそらく、CLIでこれを行うこととは少しでも関係がありません。

RTTI(実行時型情報)をオンにしてコンパイルする必要があります。次に、ウィキペディアの記事http://en.wikipedia.org/wiki/Run-time_type_informationを見て、 GoogleでRTTIを検索します。あなたのために働くはずです。

一方、すべてのデータクラスに対して、それがどのタイプであるかを説明するメンバー変数を持つ仮想基本クラスが必要になる場合があります。

于 2010-03-09T16:47:14.283 に答える