----- Original Message -----
From: "Noel Yap" <[EMAIL PROTECTED]>
To: "Boost mailing list" <[EMAIL PROTECTED]>
Sent: Thursday, April 24, 2003 4:13 AM
Subject: Re: [boost] Re: class proposal


> "Justin M. Lewis" wrote:
> >
> > in/out seems to be used fairly commonly in COM.  I'm not sure I have any
> > great examples off the top of my head, but I know they're commonly used.
>
> I'm not a COM person, but I believe it's written in C.  If so, then you
> are correct that in/out parameters are more needed since noone would
> want to create a struct for each multiple return type.
>
> OTOH, C++ has templates to deal with this situation (ie boost::tuple<>)
> so, qualifying my previous statement, in C++ I still see no need for
> in/out parameters.
>


I think most COM objects are written in C++.  I should have been more
specific here, if you're looking at ActiveX objects, in/out params are used
all over the place.  Each function returns an HRESULT, iirc, any data you
want returned has to be returned in a param.


> > And using pointers is part of what we're trying to avoid here.  Like I
said,
> > I avoid using pointers whenever possible at this point.
>
> I'm a little confused.  Either you pass in the entire object or you pass
> in a pointer (even if it's wrapped in another class).  How is this new
> class supposed to be implemented?
>

And, it's not either pass in a whole object or pass in a pointer, you're
forgetting references.  This new class takes in a reference, and stores
that.  It doesn't do anything with pointers.

> > And, again, the real intent here is to insure clarity at the point of
> > invocation.  In my case I'm looking at 100's of thousands of lines of
code,
> > written over the past 8 years.  It's tiresome trying to chase down where
> > values COULD have changed.  In this setup you KNOW exactly what calls
are
> > changing parameter values, and it's enforced.  As long as the library
calls
> > use the c_out and c_in_out classes people using the library are forced
to
> > conform to the format.  So, 8 years, and a few million lines of code
later,
> > no one will wonder what might cause a variable they're tracking to
change
> > values.
>
> I think if parameters are used for in parameters only and return values
> are used for out parameters only, the same thing is achieved.  For
> example,
>
>   inOutValue = square( inOutValue );
>
> vs (using an extension for generality):
>
>   square( c_in_out< typeof( inOutValue ) >( inOutValue ) );
>
> Noel
>

And, again, returning an object isn't always desirable, you could be copying
large objects for no reason.  You may not call a copy constructor, but an =
operator is being used.

_______________________________________________
> Unsubscribe & other changes:
http://lists.boost.org/mailman/listinfo.cgi/boost
>

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to