class CDOM_EXPORT DOM_Entity: public DOM_Node {
.
.
.
.
};

polymorphism has nothing to do with dynamically casting up and down a class
heirarchy tree. You might want to downcast to access methods in the derived
type, they don't have to be polymorphic methods.


> -----Original Message-----
> From: [EMAIL PROTECTED] [SMTP:[EMAIL PROTECTED]]
> Sent: Friday, June 08, 2001 4:07 PM
> To:   [EMAIL PROTECTED]
> Subject:      RE: sample for down casting DOM_Node to DOM_Entity ??
> 
> 
> You cannot use dynamic_cast with DOM_Node because it is not a polymorphic
> type.  If your compiler lets you do this, you should throw it out and get
> a
> new one.  The whole reason for using dynamic_cast is that you want
> run-time
> type casting, not compile-time type casting, so if this doesn't compile,
> it's probably not because the compiler figured out the actual type.
> 
> There are lots of examples of "downcasts" in the sample code.  If you like
> old-style casts (which the Xerces code uses for portability), then use
> those:
> 
> void
> foo(DOM_Node  node)
> {
>     if (node.getNodeType() == DOM_Node::ENTITY_NODE)
>     {
>         DOM_Entity  ent = (DOM_Entity&)node;
>     }
> }
> 
> If you prefer new-style casts, which are safer, use those:
> 
> void
> foo(DOM_Node  node)
> {
>     if (node.getNodeType() == DOM_Node::ENTITY_NODE)
>     {
>         DOM_Entity  ent = static_cast<const DOM_Entity&>(node);
>     }
> }
> 
> Dave
> 
> 
> 
>  
> 
>                     "Adams,
> 
>                     David"               To:
> "'[EMAIL PROTECTED]'" <[EMAIL PROTECTED]>    
>                     <dadae@allsta        cc:     (bcc: David N
> Bertoni/CAM/Lotus)                                 
>                     te.com>              Subject:     RE: sample for down
> casting DOM_Node to DOM_Entity ??       
>  
> 
>                     06/08/2001
> 
>                     04:42 PM
> 
>                     Please
> 
>                     respond to
> 
>                     xerces-c-dev
> 
>  
> 
>  
> 
> 
> 
> 
> No it is not safe. That is the old style of casting. With that style I
> could
> do something like this:
> int x = 1;
> DOM_Node n = (DOM_Node)x; // which you know is not right.
> 
> I suggest you use the following:
> DOM_Entity domen = dynamic_cast<DOM_Entity>(node);
> If it doesn't compile, it may be that the compiler is trying to tell you
> that 'node' may NOT be a DOM_Entity type and you are doing an illegal
> cast.
> 
> Regarding the blank screen, in your example, if 'node' is not a DOM_Entity
> type, you could be corrupting your screen memory.
> 
> > -----Original Message-----
> > From:         Awasthi, Anand [SMTP:[EMAIL PROTECTED]]
> > Sent:         Friday, June 08, 2001 3:33 PM
> > To:           '[EMAIL PROTECTED]'
> > Subject:           RE: sample for down casting DOM_Node to DOM_Entity ??
> >
> > thanks guys...
> >
> > i tried
> >
> > DOM_Node node;
> > DOM_Entity domen = (DOM_Entity &)(node);
> >
> > its compiles...but is this safe ??
> >
> > later on i want to print PublicId and SystemId associated with this
> Entity
> > node and
> > i coded following:
> >
> > cout << "public id "  << ((DOM_Entity &)node).getPublicId().transcode()
> <<
> > endl;
> > cout << "system id "  << ((DOM_Entity &)node).getSystemId().transcode()
> <<
> > endl;
> >
> > but I am getting blank screen . is the above code correct or is there
> any
> > better
> > implementation for obtaining PublicId and System Id value ?? pls suggest
> > that.
> >
> > as a matter of fact when I use above DOMStrng.transcode() method to
> obtain
> >
> > NOde Name ...i get Node Name. But when I try to obtain Node Value thru
> > getNodeValue().transcode(),
> > I get blank screen..whats wrong ??
> >
> >
> >
> > pls enlighten me
> >
> >
> > thanks
> > anand
> >
> >
> >
> >
> >
> >
> > -----Original Message-----
> > From: Adams, David [mailto:[EMAIL PROTECTED]]
> > Sent: Friday, June 08, 2001 3:24 PM
> > To: '[EMAIL PROTECTED]'
> > Subject: RE: sample for down casting DOM_Node to DOM_Entity ??
> >
> >
> > Curt is correct, in that I am assuming you know that the Node is an
> > DOM_Entity type node and was passed around your code as a DOM_Node and
> you
> > simply want to get its derived type back. If you do not know what type
> it
> > really is, you do have to check it. The VC++ macro "DYNAMIC_DOWNCAST" is
> > another way to check if that works for you.
> >
> > > -----Original Message-----
> > > From:       Adams, David [SMTP:[EMAIL PROTECTED]]
> > > Sent:       Friday, June 08, 2001 3:16 PM
> > > To:         '[EMAIL PROTECTED]'
> > > Subject:         RE: sample for down casting DOM_Node to DOM_Entity ??
> > >
> > > DOM_Node n = // some node;
> > > DOM_Entity e = dynamic_cast<DOM_Entity>(n);
> > >
> > > I do not know what compiler you are using, but you will need to set
> the
> > > /GR
> > > switch on VC++ compilers. This is done by going to Project->settings,
> > > select
> > > the C/C++ tab, select the C++ Language category, and click on "Enable
> > > Run-Time Type Information (RTTI)" to enable it.
> > >
> > > > -----Original Message-----
> > > > From:          Awasthi, Anand [SMTP:[EMAIL PROTECTED]]
> > > > Sent:          Friday, June 08, 2001 2:58 PM
> > > > To:       '[EMAIL PROTECTED]'
> > > > Subject:       sample for down casting DOM_Node to DOM_Entity ??
> > > >
> > > > Hi,
> > > >
> > > > could someone pls provide sample code for down casting DOM_Node to
> > > > DOM_Entity ??
> > > >
> > > > thanks
> > > > Anand
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to