On 06/24/2016 10:19 AM, Smoke Adams wrote:

> We have __FUNCTION__ so, __THIS__ seems somewhat natural. Null for
> outside of objects is fine.

Would the following work, where you check the first argument?

import std.stdio;

void Log(string filename = __FILE__, T...)(T args)
{
    static if (is (T[0] == typeof(null))) {
        writefln("working without an object for %s", args[1 .. $]);

    } else static if (is (T[0] == class)) {
        writefln("working with object %s and %s", args[0], args[1 .. $]);

    } else {
        // Recurse
        import std.meta : AliasSeq;
        return Log!filename(AliasSeq!(null, args));
    }
}

class C {
}

void main() {
    Log(42, "hello");
    auto c = new C();
    Log(c, "cool");
    c.Log("breeze");
}

The output:

working without an object for 42
working with object deneme.C and cool
working with object deneme.C and breeze

Ali

Reply via email to