Avoids having the same loop in two places.
GetParams() was under consideration to be removed after the CMessage
porting work is done, but it's starting to look like it's here to stay.
There are cases, such as mode messages, where "get all params starting
from position N" is handy.
1a3e9ec made CMessage try to retain the colon if the original message
contained one. We should not, however, remember that when the params
are replaced entirely. Consider for example an extended-join message
that is made suitable for a client that doesn't have extended-join
capability:
CMessage msg(":nick!ident@host JOIN #chan account :real name");
msg.SetParams({msg.GetParam(0)});
msg.ToString(); // ":nick!ident@host JOIN :#chan"
Due to (intentional) lack of CFooMessage::operator=(CMessage), it was
a bit clumsy to do such copy-conversions:
CMessage Copy = Message;
CJoinMessage& JoinMsg = static_cast<CJoinMessage&>(Copy);
// ...
vs.
CJoinMessge JoinMsg;
JoinMsg.Clone(Message);
// ...
Alternatively, copy ctor(CMessage) and assignment operator=(CMessage)
could have been added to all CMessage subclasses. I've been trying to
avoid that, to make these operations very explicit. It has helped a
lot so far by preventing accidental copies.