"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.

> 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, 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
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to