2013-04-30 33 views
1

我的需求是獲取一個對象的內容並將其強制爲不同的類型。實際上,內容是一個指向本地C++類的指針,而dot net對象是允許dot net訪問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 

「」類型的第一次機會異常出現在test_xxxxx.dll

其他信息:指定的轉換無效。

回答

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; 
} 

查看this page瞭解更多信息。該頁面主要關注從舊的C++託管擴展遷移到C++/CLI,但它確實給出了C++/CLI中轉換運算符的語法。

相關問題