14 Kasım 2011, PAZARTESİ
Dinamik döküm void işaretçi için pratik kullanım alanları da var mı?
C T q = dynamic_cast<T>(p);
inşaat gerçekleştiren bir çalışma zamanı dökme bir gösterici p
için başka bir işaretçi türü T
Bu görünür mirası hiyerarşisinin dinamik türü *p
sipariş için başarılı. Orası Tamam da.
Ancak, aynı zamanda sadece bir işaretçi döndürecektir dynamic_cast<void*>(p)
, gerçekleştirmek için "en türetilmiş nesne" (bkz 5.2.7::7 C 11). Bu özellik muhtemelen dinamik kadrosu uygulanması bedavaya geliyor anlıyorum ama pratikte işe yarıyor mu? Tüm bunlardan sonra, dönüş türünün en iyi void*
, Bu nedir?
CEVAP
14 Kasım 2011, PAZARTESİ
dynamic_cast<void*>()
gerçekten eğer çoklu kalıtım ile ilgili ise hatta kimliğini kontrol etmek için kullanılabilir.
Bu kodu deneyin:
#include <iostream>
class B {
public:
virtual ~B() {}
};
class D1 : public B {
};
class D2 : public B {
};
class DD : public D1, public D2 {
};
namespace {
bool eq(B* b1, B* b2) {
return b1 == b2;
}
bool eqdc(B* b1, B *b2) {
return dynamic_cast<void*>(b1) == dynamic_cast<void*>(b2);
}
};
int
main() {
DD *dd = new DD();
D1 *d1 = dynamic_cast<D1*>(dd);
D2 *d2 = dynamic_cast<D2*>(dd);
std::cout << "eq: " << eq(d1, d2) << ", eqdc: " << eqdc(d1, d2) << "\n";
return 0;
}
Çıkış:
eq: 0, eqdc: 1
Bunu Paylaş:
JavaScript kapatılması için bir pratik...
Neden nesne türü dinamik bir null başv...
Href JavaScript bağlantıları için özni...
Nasıl özel yöntemleri, alanları veya i...
Dinamik hücre düzenleri için UİTableVi...