1

私の要件は、あるオブジェクトの内容を取得して、それを別の型に強制することです。実際には、コンテンツはネイティブ C++ クラスへのポインターであり、ドット ネット オブジェクトは、ドット ネットが C++ にアクセスできるようにするラッパーです。したがって、継承階層内のどのクラスにアクセスするかによって、同じ C++ オブジェクトが異なるラッパーを持つ場合があります。そして、これらのラッパーには継承関係がありません。

VB.netで私は書くことができます。

Dim s1 As Short = 13
Dim l1 As Long = s1

今書きたいのは、

Dim v1 As ValueTest1 = New ValueTest1(13)
Dim v2 As ValueTest2 = v1

ValueTest1 と ValueTest2 は、C++/CLI で値の型として定義されています。したがって、ValueTest1 に ValueTest2 を受け取るコンストラクターがありますが、それでもコンパイラーは ValueTest1 から ValueTest2 への型強制をサポートしません。

イライラします。

暗黙的な変換を行う方法について何か提案はありますか?

OK 演算子の使用は機能しましたが、オブジェクトを使用する場合には追加の問題があります。

Dim v1 As ValueTest1 = New ValueTest1(13)
Dim v2 As ValueTest2 = v1 ' OK
Dim o1 As Object = v1
Dim v3 As ValueTest2 = o1 ' fails with the exception below

タイプ 'System.InvalidCastException' の初回例外が test_xxxxx.dll で発生しました

追加情報: 指定されたキャストは無効です。

4

1 に答える 1

0

明示的または暗黙的な変換演算子を自分で定義できます。

// without keyword 'explicit', it's an implicit conversion operator
static operator ValueTest1 ( ValueTest2 two )
{
    ValueTest1 one(two.foo, two.bar);
    return one;
}

static explicit operator ValueTest2 ( ValueTest1 one )
{
    ValueTest2 two(one.foo, one.bar);
    return two;
}

詳細については、このページを参照してください。そのページは、C++ 用の古いマネージ拡張から C++/CLI への移行に焦点を当てていますが、C++/CLI の変換演算子の構文を示しています。

于 2013-04-30T12:52:09.530 に答える