On Thu, 7 Feb 2002, Karl B Buchner wrote:
> ch < vict << "You give it to " << 'M' << ".\r\n";
Why not just use a unary manipulator? Then you could do:
ch << "You give it to " << act::name(vict) << '.' << act::endl;
This is a very simple, but powerful idea. You can define manipulators
act::subjective() (to return the subjective [he/she/it] personal pronoun
for a character), act::objective() (to return the objective [him/her/it]
personal pronoun for a character), and act::possessive() (to return the
possessive [his/hers/its] pronoun for a character), among others.
In fact, if you're smart about how you design your streams, you can
eliminate act() altogether. To write to a room, you might do:
ch.InRoom() << act::exclude(ch) << act::exclude(vict)
<< "This message is seen by everyone in the room, "
<< "except ch and vict." << act::endl;
The act::exclude() manipulators would probably be implemented by returning
either a null stream (so it just drops everything) or the proper output
stream. This is a little longer than the corresponding act() call, but
more readable and powerful.
> Of course support for more than just char * and int could be
> added...
...or could just make it part of the IOStreams framework and get all of
this automatically. That's a code-intensive topic, which bears more words
than I can spare here. A good book on advanced C++ should cover this.
> [... snip stuff on conversion ...]
Yes, you can use std::stringstream for conversion. This isn't always a
good idea, since it introduces some overhead, but, in our case, simpler is
better than most efficient. The overhead it introduces is mainly in code
size ("template bloat").
-dak
--
+---------------------------------------------------------------+
| FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
| Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
| Newbie List: http://groups.yahoo.com/group/circle-newbies/ |
+---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT