2010-03-09 21 views
9

Nesnenin türünü kontrol etmek için basit bir yol var mı? Ben çirkin hissediyor ama işleri System::InvalidCastException s arayan yuvalanmış try-catch blokları kullanıyorum andaC++/CLI'de bir nesnenin türü nasıl kontrol edilir?

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

if(o->GetType() == MyObject) 
{ 
    // Do somethine with the object 
} 
else 
{ 
    // Try something else 
} 

: Aşağıdaki satırlar boyunca bir şey gerekiyor. Daha hızlı/yavaş/okunabilir olup olmadığını görmek için yukarıdaki kod gibi bir şeyi denemeyi ve denemeyi denedim, ancak sözdizimi denemek için bile çalışamıyorum.

Herkesin merak etmesi durumunda, bunun çalışması için veri sağlayan bir iş parçacığı girerek tek bir sıraya sahip olmaktan geliyor. Bazen ayarları değiştirmek ve veri kuyruğu aracılığıyla iletmek istiyorum bunu yapmak için basit bir yoldur.

cevap

24

C++/CLI'de typeof(MyObject) C# 'da MyObject::typeid'u kullanabilirsiniz. Aşağıdaki kod utanmadan sorudan kopyalanır ve değiştirilir ...

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

if(o->GetType() == MyObject::typeid) 
{ 
    // Do somethine with the object 
} 
else 
{ 
    // Try something else 
} 
+0

+ 1/Kabul: Bu mükemmel - teşekkürler! –

+0

, bu hala VS 2010/2012'de çalışıyor mu? Tipik üyeyi göremiyorum ... – bbqchickenrobot

+1

Hala VS2010'da çalışıyor. VS2012'm yok, bu yüzden en son VS sürümüne yorum yapamıyorum. C++/CLI için otomatik tamamlama VS2010'da bulunmadığı için "bu tip üyeyi görmüyorsanız" olabilirsiniz. – mcdave

9

Sen How to: Implement is and as C# Keywords in C++ kontrol etmelisiniz:

Bu konu ve Visual C++ C# anahtar kelimeler olarak işlevselliğini nasıl uygulanacağı gösterilmiştir.

+0

Bu yöntem, dış birleştirmelerde kullanılabilmesi için şablonlardan ziyade jeneriklerle yapmanın bir yolu var mı? –

0

düzenleme: Buradan ayrılacağım. Ama bu cevap C++ için. Muhtemelen CLI için bunu yapmakla ilgili bir miktar bile değil.

RTTI (Çalışma Zamanı Türü Bilgileri) ile derlemeniz gerekiyor. Ardından, wikipedia makalesine bakın http://en.wikipedia.org/wiki/Run-time_type_information ve google for RTTI. Senin için çalışmalı.

Diğer taraftan, tüm veri sınıflarınız için, ne tür olduğunu açıklayan bir üye değişkeni ile bir sanal taban sınıfına sahip olmak isteyebilirsiniz.

İlgili konular