Re: [CODE] Operator overloading (C++)

From: Franco Gasperino (awe@CET.COM)
Date: 08/18/97

  Well, if you do change the type from struct to class, you may
need to change references to any local definitions within other
functions to reflect that. As far as access privlidges, I would say
to leave most of the char_data public, as these values must be
changed via pointers and that you will be the only one (most likely)
accessing it. Using public functions to change/return private data
types on the char_data may be a bit redudnant in this case.
  But, I havn't looked at circle source in quite some time, so I may
be quite wrong =)

Franco Gasperino
Cutting Edge Communications

> From: Brian Gray <mandy@NETCOM.COM>
> To:
> Subject:  [CODE] Operator overloading (C++)
> Date: Monday, August 18, 1997 12:30 PM
> Howdy all.  I just resubscribed about 5 minutes ago after about a 2-year
> break.  Did I miss anything?
> Well to jump right in, anyone out there any good with C++?  I've
> converted a Circle-based game to C++ just as far as getting it to compile
> with g++.  In other words, I've not yet redesigned the architecture to
> use proper classes and object-orientedness.
> Anyhoo, I thought it would be swell to overload the operator<< for
> char_data in effect to replace send_to_char.  I did this in the form of a
> template which follows:
> #include <strstream.h>
> template <class T> char_data * operator<<(char_data *ch, T msg) {
>   ostrstream strout;              // inherit ostream to get inserters
>   strout << msg << ends;          // insert message and NULL-terminate
>   send_to_char(strout.str(), ch); // lock char* and send it
>   strout.freeze(0);               // unlock char* so class can clean up
>   return ch;
> }
> Unfortunately, the compiler bitches about the fact that char_data is a
> struct rather than a class.  Is there any way around this other than
> actually changing it into a class?  Could I get away with just replacing
> "struct" with "class" in structs.h and adding the line "public:" at the
> top?  If I go that way, I guess I might as well define
> char_data::send().  Obviously, I eventually want to protect all data
> members and provide access functions, but first things first.  For now,
> I'd be happy ditching those sprintf(buf, ...)'s and coding:
> ch << "Brought to you by the numbers " << 4.7 << " and " << 47 << "\n\r"
>    << "and the letter " << 'B' << "\n\r";
>  -- Brian
>      +------------------------------------------------------------+
>      | Ensure that you have read the CircleMUD Mailing List FAQ:  |
>      | |
>      +------------------------------------------------------------+

     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | |

This archive was generated by hypermail 2b30 : 12/08/00 PST