On Monday, 9 September 2013 at 17:17:07 UTC, H. S. Teoh wrote:
On Mon, Sep 09, 2013 at 07:07:58PM +0200, Gyron wrote:
Hey there, I've experimented a little with UFCS today and ran into a
problem.

My first question, which is kinda off-topic:
Why does D use the int type if you give it a number started with
0x(hex), shouldn't it use uint for that ?

Good point, please file a bug on: http://d.puremagic.com/issues


Here comes the real question:
I've extended the int by one function, which is the following (just
to represent the problem):
public static T read(T)(int address)
{
        return cast(T)1;
}

It works perfectly if the function stands alone (is global), but it doesn't work if I put it into a class (because I want it to be a bit
more organized) like that:
class CMemory
{
        public static T read(T)(int address)
        {
                return cast(T)1;
        }
}

I'm not able to write something like:
0x1212.CMemory.read!bool();


So the question is, how can I make it to be able to be used like
this:
0x1212.read!bool();

but still organized within the class ?

I don't think UFCS works with qualified names right now. This is a known issue. The best way to solve this problem is to put your function in a separate module instead of a class, then importing the module will pull it into your current namespace and you can use it as above, yet have it organized by module (but not by class -- that's unfortunately not
possible right now). Something like this:

        ----memory.d----
        module memory;
        T read(T)(int address) { ... }

        ----main.d----
        import memory;
        void main() {
                0x1212.read!bool();
        }


T

The thing is, that I already have other classes in that module and I hate to mix global functions(global in the means of global in the module) with classes. I would separate them in different files, but sadly thats not possible (as far as I can see, because you can only define the module once, not like namespaces in c++).

Reply via email to