RE: (off-topic) RE: [Doxygen-users] Documenting IDL
Brought to you by:
dimitri
|
From: Stephen G. <ste...@cl...> - 2001-06-11 12:37:27
|
> -----Original Message-----
> From: dox...@li...
> [mailto:dox...@li...]On Behalf Of Hendrik
> Schober
> Sent: 10 June 2001 20:58
> To: dox...@li...
> Subject: Re: (off-topic) RE: [Doxygen-users] Documenting IDL
>
>
> "Stephen Goudge" <ste...@pi...> wrote:
>
> > [...]
> > I did originally have an operator int() that could be used
> in if-statements,
> > which worked fine using VC++2 through to VC++4; then a
> client bought VC++5 and
> > it became ambiguous (I forget the precise reason why), so
> everything switched to
> > IsValid() from then on.
>
> 'int' seems like one of the most troublesome ideas.
> (What's 'spa+spb' to become then?)
>
> > [...]
> > Even with a decent compiler, there is the vexed question of
> what the cast
> > operator should be casting _to_ - you don't really want to
> return another
> > pointer type, as that looks too much like you're providing
> a backdoor. These
> > days, 'bool' would be a reasonable choice (now that the
> compilers actually
> > support 'bool'). The best choice would be the mythical
> 'logical' type that 'if',
> > 'while' etc use, but that isn't available :-(
>
> Oh, but that's available: It's named 'bool'.
The "the mythical 'logical' type that 'if', 'while' etc use" is not 'bool' - I
suppose you could produce a parser that used bool there, but just taking a straw
poll around the office, the guy sitting next to me (working on a C compiler)
uses 'long int' for 'if' etc, which is what the Standard says you do (hence the
use of operator int() to feed 'if' in the oldest code). Meanwhile, in my
program, a C-expression evaluator has a type 'logical' that is only used
internally (ie, from the point of view of someone writing an expression to be
evaluated, is mythical because you can not declare anything to have type
'logical') and lives at the very opposite end of the automatic type promotion
ladder from 'bool'.
Also, unfortunately, all that time ago, 'bool' was not available in all the
compilers being used :-(
> But 'bool' isn't all that good either, because it's an
> arithmetic type. (Or was it convertible into one?)
> You could thus write 'sp+5' and get funny results.
<snip>
That points out the problem exactly - all of the types that you can use here
already have well-known meanings and tend to imply that it is possible to use
them in expressions _other_ than just 'if'. No matter what you choose, you can
write something that will give funny results.
Hence (not to be taken too seriously) wish to be able to use a type, 'logical',
that does not carry any such baggage, based on the fact that I _know_ such a
type does/can live deep within the bowels of a compiler.
The _only_ answer I know of that is possible to implement _and_ totally free of
any such baggage is an "IsValid()" method - which is right back to where we
started.
> In his book "Modern C++ Design" Andrei Alexandrescu
> discusses this issue. His idea (typing from memory):
>
> template<class T>
> class SmartPtr {
> private:
> class Tester {
> void operator delete(void*);
> };
> public:
> operator Tester*() const
> {
> if( !IsValid() )
> return NULL;
> static Tester tester;
> return tester;
> }
> // ...
> };
>
> (The private 'operator delete()' is there to prevent
> users from trying to delete the result of calling the
> convertion operator.)
>
> I have not used this yet, so I don't know whether it's
> really as great an idea as it seemed to me.
>
> > Stephen Goudge
>
> Schobi
Aha, yet another approach :-)
The suggestions - _all_ of them - all have their merits and all can all work
extremely well, but, just like the search the One True String Class, there is no
absolute best answer to this. Shame really.
Now, back to Doxygen...
Stephen Goudge
|