2011-07-21 23 views
7

早些時候我問,如果使用as在C#中是安全的(即不炸燬):Is using "as" in C# a safe way of casting?在C++/CLI中進行安全轉換 - 相當於C#的「as」?

我喜歡的答案,並最終使用基於關閉它的東西:

Foo x = y as Foo; 
if (x != null) 
{ 
    ... 
} 

但現在我我轉換我的C#代碼爲C++/CLI(由於依賴問題..)所以問題是..

我正在尋找C++/CLI相當於「爲」,這是安全的,不會打擊如果不正確的類型,則在運行時啓動任何人都可以推薦符合我需求的演員陣容嗎? (請舉例說明,如果可以的話)

謝謝!

+0

coud這個老線程的任何幫助嗎? http://stackoverflow.com/questions/712845/c-cli-question-is-there-an-equivalent-to-the-c-is-keyword-or-do-i-have-to-u – crisbia

+0

反射器只是在這裏說'as'...但是,我不知道C++/CLI; p –

+0

@Marc:從您刪除的答案中,我認爲您使用的是MC++模式,而不是C++/CLI。當然,Reflector的C++/CLI反編譯器總是落後於市場銷售的語言。 –

回答

12

C++做這種事情的方法是dynamic_cast。我不知道託管引用與非託管引用是否相同,MSDN對它的信息很少。

+3

http://msdn.microsoft.com/en-us/library/85af44e9.aspx –

+0

因此,dynamic_cast不會導致運行時錯誤,但使用safe_cast呢? (請參閱下面的其他答案的評論) – developer

+2

dynamic_cast <> is as,safe_cast <> is is :) –

0

編譯C++時,您需要啓用RTTI啓用的功能。 然後您可以使用dynamic_cast(給出類似於as的空)和typeid(類似於is)。