SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Washington

    Adam Washing

    12 Mayıs 2006
  • kimaliz

    kimaliz

    18 Temmuz 2006
  • Mark Hyder

    Mark Hyder

    6 EKİM 2011