Thread overview
Can't overload functions in different modules
Nov 09, 2004
Buchan
Nov 09, 2004
Walter
Nov 11, 2004
Buchan
November 09, 2004
Currently it is impossible to have the compiler figure out which overloaded function
to call when they are defined in different modules unless you specify a module path,
even with aliases. ie, this code wont work: (the modules are in different files)

<code>
module foomod;
struct Foo {
	char[] name;
	int value;
}

char[] toString(Foo foo) {
	return name;
}

module main;
import foomod, std.string;

uint i;
Foo f;

main() {
	writefln(toString(f)); // fails if "alias std.string.toString toString" is defined last
	writefln(toString(i));  // fails if "alias Foo.toString toString" is defined last
	// Both fail if neither are defined
}

</code>

Now I know I could alias them as different symbols, but then you lose the whole point of overloading.

-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/m2/
November 09, 2004
You need to have two alias declarations. The following works:

---------------- foomod.d ---------------------
module foomod;

struct Foo {
char[] name;
int value;
}

char[] toString(Foo foo) {
return foo.name;
}

----------------- test.d --------------------------
module main;
import foomod, std.string, std.stdio;

alias std.string.toString toString;
alias foomod.toString toString;

uint i;
Foo f;

void main() {
writefln(toString(f));
writefln(toString(i));
}

-----------------------------------------------------


November 11, 2004
On Tue, 9 Nov 2004 11:32:34 -0800, Walter <newshound@digitalmars.com> wrote:

> You need to have two alias declarations. The following works:
>
> ---------------- foomod.d ---------------------
> module foomod;
>
> struct Foo {
> char[] name;
> int value;
> }
>
> char[] toString(Foo foo) {
> return foo.name;
> }
>
> ----------------- test.d --------------------------
> module main;
> import foomod, std.string, std.stdio;
>
> alias std.string.toString toString;
> alias foomod.toString toString;
>
> uint i;
> Foo f;
>
> void main() {
> writefln(toString(f));
> writefln(toString(i));
> }
>
> -----------------------------------------------------
>
>

huh... I swore I tried that... Whoops. (You didnt change any import stuff from 1.02, did you?)

-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/m2/