SORU
1 ŞUBAT 2009, Pazar


C örneğin eşdeğer

instanceof C eşdeğer elde etmek için tercih edilen yöntem nedir?

CEVAP
1 ŞUBAT 2009, Pazar


Kullanmayı deneyin:

if(NewType* v = dynamic_cast<NewType*>(old)) {
   // old was safely casted to NewType
   v->doSomething();
}

Bu derleyici rttı desteği etkin olması gerekir.

EDİT: Bu cevap üzerine bazı iyi yorumlar vardı!

Bir dynamic_cast (ya) örneğin kullanmak için ihtiyacınız olan her zaman daha gerekli bir şey olup olmadığını kendinize sorun. Genellikle kötü tasarım bir işarettir.

Tipik çözümler koyarak özel davranış sınıfı kontrol için içine bir sanal işlevi temel sınıf ya da belki de tanıtma gibi bir şey visitor * * * * tanıştırabilirsin belirli davranışları için alt olmadan değişen arayüzü (dışında ekleme ziyaretçi kabul arabirimi elbette).

Belirttiği gibi dynamic_cast bedava gelmiyor. Basit ve tutarlı bir şekilde en işleyen hack sahne (ama her durumda değil) temelde bir numaralama sınıf doğru yerdesin olup olmadığını kontrol edebilir ve olası tüm türleri temsil eden ekliyor.

if(old->getType() == BOX) {
   Box* box = static_cast<Box*>(old);
   // Do something box specific
}

Bu iyi oo tasarım değil, ama geçici bir çözüm olabilir ve maliyeti daha fazla veya daha az, yalnızca sanal işlev çağrısı. Ayrıca ne olursa olsun RTTI etkin ya da değil çalışır.

Bu yaklaşım miras çok düzeyde desteklemiyor unutmayın eğer dikkatli olursan değil kod ile bu gibi bakıyor sonunda olabilir:

// Here we have a SpecialBox class that inherits Box, since it has its own type
// we must check for both BOX or SPECIAL_BOX
if(old->getType() == BOX || old->getType() == SPECIAL_BOX) {
   Box* box = static_cast<Box*>(old);
   // Do something box specific
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Doc Adams

    Doc Adams

    20 HAZİRAN 2007
  • friendz.net

    friendz.net

    29 EKİM 2010
  • NextGenWindows

    NextGenWindo

    8 Kasım 2011