UFCS from within classes
Gyron
Threk at web.de
Mon Sep 9 10:51:40 PDT 2013
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++).
More information about the Digitalmars-d-learn
mailing list