On Thursday, 3 December 2015 at 22:27:45 UTC, Andrei Alexandrescu wrote:
On 12/03/2015 05:14 PM, Jonathan M Davis wrote:
You declare static functions on a struct or class and then make the struct or class unusable as an object (e.g. by having a final abstract class or explicitly disabling all ways to construct the struct or class).

I must be dense. Consider:

struct List
{
    int x;
    template _stable()
    {
        void fun()
        {
             import std.stdio;
             writeln(this.x);
        }
    }
    alias stable = _stable!();
}

void main()
{
    List lst;
    lst.stable.fun();
}

Could you please redo the example with a struct?

Sorry, but I clearly didn't pay enough attention to what you were doing, because I only saw the namespace that you put at the module level and not the one inside of the struct. The one at the module level works just fine with a struct or class, avoids having to declare a alias, and allows you to just shove the documentation on the functions normally without having to explain that the functions in _MyNamespace need to be called with MyNamespace instead. It would also work inside of a class or struct except that based on the implementation of fun, you want access to the an object of the struct or class that it's in, and I don't see a way to do that anymore than you do.

That being said, I confess that I don't see any reason to create namespaces inside of a struct or class. They already have to be used as part of the struct or class, so they're namespaced at that level already, and if you have so many member functions that you feel the need to namespace them further, then that implies that you have way too many IMHO. But you can always just put the "namespace" in their names. It's even one character shorter, because you avoid the period.

- Jonathan M Davis

Reply via email to