29-May-2014 03:52, Dicebot пишет:
On Wednesday, 28 May 2014 at 23:27:34 UTC, bearophile wrote:
This is currently accepted code:
[....]
IMHO something like this is better:
class MyException : Exception
{
private char[20] index_buff; // should be enough for size_t.max
Why not just save 'size_t' right here, and do formattedWrite in the
toString? Anyway I think this is what exceptions should do - save the
state and only ever format message in toString.
this(string msg, size_t index, string file = __FILE__, size_t line
= __LINE__, Throwable next = null)
{
super(msg, file, line, next);
// in-place conversion of size_t to char[]
}
void toString(void delegate(const(char)[]) sink) const
{
sink(msg);
sink(" (at index ");
sink(index_buff);
sink(")");
}
}
Benefits: no arbitrary message length limit, no string construction
unless toString is actually called.
Yup.
--
Dmitry Olshansky