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

Reply via email to