UFCS from within classes

H. S. Teoh hsteoh at quickfur.ath.cx
Mon Sep 9 10:15:40 PDT 2013


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

-- 
Shin: (n.) A device for finding furniture in the dark.


More information about the Digitalmars-d-learn mailing list