SAX/C++: C++-specific design principles

Mark D. Anderson mda at discerning.com
Mon Dec 6 20:45:53 GMT 1999


A danger with adopting the convention that 1 of the 0 or more output
parameters is a return value is that it may interfere with a later
convention on error handling.

I haven't seen that discussed yet in your design principles.
Unlike java or perl, exceptions in C++ are a bit of a land mine,
and could also risk destroying any simple interop with a straight
C library, either above or below.

Not to mention the fact that there is no standard for cross-language
exception raising.

choices seem to be:
- return an error code
- return a boolean success/failure
- use C++ exceptions
- call an error handler and return 0 (which may not get run if the error handler aborts)
- some combination of the above, configurable by the programmer

btw, i'd like to register an objection to reference args. they make
code reading a bit of pain because you cannot tell from the call whether
a copy constructor is going to be used or not -- you always have to
go hunt up the .h. with a pointer arg, it is always clear.

and in regards the character type question, that is a bit awkward because
a key goal for many programmers will be to use the "native" string type
used by the parser, which may be just linked in binary -- not recompiled.
of course, if we all just use expat, that is solved -- we have to have a
SAX/C++ type which directly points to expat's strings.

-mda

--On Friday, December 03, 1999 8:58 AM -0500 David Megginson <david at megginson.com> wrote:

> James Clark <jjc at jclark.com> writes:
> 
>> That's problematic for EntityResolve::resolveEntity; that requires that
>> ownership of an InputSource be transferred from to the caller from the
>> callee.
>> 
>> This could be avoided by doing:
>> 
>> virtual const InputSource *
>> resolveEntity(const char *publicId,
>>               const char *systemId);
>> 
>> instead of:
>> 
>> virtual void
>> resolveEntity(const char *publicId,
>>               const char *systemId,
>>               InputSource &inputSource);
> 
> (I'll assume that James accidentally reversed the two).  The second
> one is a very good idea -- the only modification I'd make is to add a
> bool return value, so that the parser knows whether the resolver
> actually wants to override:
> 
> virtual bool
>  resolveEntity(const char *publicId,
>                const char *systemId,
>                InputSource &inputSource);
> 
> 
> All the best,
> 
> 
> David
> 
> -- 
> David Megginson                 david at megginson.com
>            http://www.megginson.com/
> 
> xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
> Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
> To unsubscribe, mailto:majordomo at ic.ac.uk the following message;
> unsubscribe xml-dev
> To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
> subscribe xml-dev-digest
> List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)



xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
To unsubscribe, mailto:majordomo at ic.ac.uk the following message;
unsubscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)





More information about the Xml-dev mailing list