Sweet! You may also find my pull request for phobos ( #863,
fullyQualifiedTypename ) useful for adding function signature
once it gets finalised and merged.
On Friday, 2 November 2012 at 17:31:55 UTC, Rob T wrote:
Thanks to input from the D community, I've managed to implement
a reasonable way to log the name of a calling function. This is
used for basic execution monitoring and for automated logging
of exception errors.
Here's what I did.
template __FUNCTION()
{
const char[] __FUNCTION = "__traits(identifier,
__traits(parent, {}))";
}
Example use in code:
throw new Exception( "Error: Function ", mixin(__FUNCTION!()) );
writefln( "File: %s, Func: %s, Line: %d", __FILE__,
mixin(__FUNCTION!()), __LINE__ );
The ONLY thing left that I would like to have, is ability to
display the function signature along with the name. The
signature will be very useful to show which version of an
overloaded or templated function was called.
If anyone can suggest imporvements, like how to get rid of need
to explicitly call mixin, and better yet a solution to get the
function signature, please post away. Thanks!
I have to mention that we need a real solution that can only be
provided through improved reflection support, eg
__scope.function, __scope.line, __scope.file, etc, or whatever
the D community thinks will fit in best.
--rt