[xsd-users] [xsd] Polymorphism dynamic_cast returns 0.

Boris Kolpackov boris at codesynthesis.com
Fri Sep 13 10:56:33 EDT 2013


Hi Harg,

Harg Tholan <hargtholan at gmail.com> writes:

> In section 5.4 of the manual it is mentioned this: " [...] as well 
> as pass true as the last argument to the xml_schema::document's 
> constructors.", but I do not know how to call such constructor.

That only applies to the C++/Parser mapping while you are using
C++/Tree.

> then I perform the dynamic type checking like:
> 
> if (xml::foo::ConcreteBar* c = dynamic_cast<xml::foo::ConcreteBar*> (&(*
> itr)))
> 
> (where itr is an iterator of a sequence of base type elements).
> 
> I inspected the generated code and looks fine (ConcreteBar inherits from
> public Bar). What am I doing wrong?

Hm, if Bar is made polymorphic (with --polymorphic-type) and the actual
type in XML is of the derived type (i.e., it either uses a substitution
group or xsi:type), then everything should work fine. You don't seem
to be slicing the object.

You may want to print the name of the dynamic type and see what it
reveals:

cerr << typeid (*itr).name () << endl;

If that doesn't help, can you show the relevant XML fragment?

Boris



More information about the xsd-users mailing list