diff --git a/include/wx/object.h b/include/wx/object.h index 4ec2bc457f..adc0c03ab1 100644 --- a/include/wx/object.h +++ b/include/wx/object.h @@ -436,6 +436,11 @@ public: // check if this object references the same data as the other one bool IsSameAs(const wxObject& o) const { return m_refData == o.m_refData; } + // RTTI information, usually declared by wxDECLARE_DYNAMIC_CLASS() or + // similar, but done manually for the hierarchy root. Note that it's public + // for compatibility reasons, but shouldn't be accessed directly. + static wxClassInfo ms_classInfo; + protected: // ensure that our data is not shared with anybody else: if we have no // data, it is created using CreateRefData() below, if we have shared data @@ -452,8 +457,6 @@ protected: virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const; wxObjectRefData *m_refData; - - static wxClassInfo ms_classInfo; }; inline wxObject *wxCheckDynamicCast(wxObject *obj, wxClassInfo *classInfo) diff --git a/tests/misc/misctests.cpp b/tests/misc/misctests.cpp index c9edba216d..328c502f31 100644 --- a/tests/misc/misctests.cpp +++ b/tests/misc/misctests.cpp @@ -149,6 +149,18 @@ void MiscTestCase::StaticCast() #endif // wxUSE_TARSTREAM } +TEST_CASE("RTTI::ClassInfo", "[rtti]") +{ + wxObject obj; + CHECK( obj.GetClassInfo()->IsKindOf(wxCLASSINFO(wxObject)) ); + CHECK( !obj.GetClassInfo()->IsKindOf(wxCLASSINFO(wxArchiveEntry)) ); + +#if wxUSE_ZIPSTREAM + wxZipEntry zipEntry; + CHECK( zipEntry.GetClassInfo()->IsKindOf(wxCLASSINFO(wxArchiveEntry)) ); +#endif // wxUSE_ZIPSTREAM +} + TEST_CASE("wxCTZ", "[math]") { CHECK( wxCTZ(1) == 0 );