www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Mixining templates having functions with the same name

reply Victor Nakoryakov <nail-mail mail.ru> writes:
Hello,

Consider snipet:

template T1()
{
	void myproperty(real x) // line X
	{
		...
	}
}

template T2()
{
	real myproperty() // line Y
	{
		return ...;
	}
}

class C(alias M1, alias M2)
{
	mixin M1!();
	mixin M2!();

	...
}

...
auto c = new C!(T1, T2)
...

Compilation of course gives an error: 'myproperty on line X conflicts 
with myproperty on line Y', this is expected dmd behaviour.

But in this case I know what I do. So who know elegant solution do 
disambigue instanciation?

-- 
Victor (aka nail) Nakoryakov
nail-mail<at>mail<dot>ru

Krasnoznamensk, Moscow, Russia
Apr 02 2006
parent reply John Demme <me teqdruid.com> writes:
Victor Nakoryakov wrote:

 Hello,
 
 Consider snipet:
 
 template T1()
 {
 void myproperty(real x) // line X
 {
 ...
 }
 }
 
 template T2()
 {
 real myproperty() // line Y
 {
 return ...;
 }
 }
 
 class C(alias M1, alias M2)
 {
 mixin M1!();
 mixin M2!();
 
 ...
 }
 
 ...
 auto c = new C!(T1, T2)
 ...
 
 Compilation of course gives an error: 'myproperty on line X conflicts
 with myproperty on line Y', this is expected dmd behaviour.
 
 But in this case I know what I do. So who know elegant solution do
 disambigue instanciation?
 
template T1() { void myproperty(real x) // line X { } } template T2() { real myproperty() // line Y { return 5; } } class C(alias M1, alias M2) { mixin M1!(); mixin M2!(); } void main() { auto c = new C!(T1,T2); } The above code compiles, links, and runs fine with DMD 0.150 on Linux. ~John Demme
Apr 02 2006
parent reply Victor Nakoryakov <nail-mail mail.ru> writes:
John Demme wrote:
 The above code compiles, links, and runs fine with DMD 0.150 on Linux.
Ooops, forgot one line... following code doesn't compile: template T1() { void myproperty(real x) // line X { } } template T2() { real myproperty() // line Y { return 5; } } class C(alias M1, alias M2) { mixin M1!(); mixin M2!(); } void main() { auto c = new C!(T1,T2); c.myproperty = 0; } dmd ../test ..\test.d(8): function test.C!(T1,T2).C.mixin M1!(); .myproperty conflicts with test.C!(T1,T2).C.mixin M2!(); .myproperty at ..\test.d(16) -- Victor (aka nail) Nakoryakov nail-mail<at>mail<dot>ru Krasnoznamensk, Moscow, Russia
Apr 03 2006
parent reply Bruno Medeiros <brunodomedeirosATgmail SPAM.com> writes:
Victor Nakoryakov wrote:
 John Demme wrote:
 The above code compiles, links, and runs fine with DMD 0.150 on Linux.
Ooops, forgot one line... following code doesn't compile: template T1() { void myproperty(real x) // line X { } } template T2() { real myproperty() // line Y { return 5; } } class C(alias M1, alias M2) { mixin M1!(); mixin M2!(); } void main() { auto c = new C!(T1,T2); c.myproperty = 0; } dmd ../test ...\test.d(8): function test.C!(T1,T2).C.mixin M1!(); ..myproperty conflicts with test.C!(T1,T2).C.mixin M2!(); ..myproperty at ..\test.d(16)
Hum, seems like a bug to me, do fill a report: http://d.puremagic.com/bugzilla -- Bruno Medeiros - CS/E student http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D
Apr 04 2006
parent reply Victor Nakoryakov <nail-mail mail.ru> writes:
Sorry for delay, I'm totally forgot about my post :)

Bruno Medeiros wrote:
 
 Hum, seems like a bug to me, do fill a report:
 http://d.puremagic.com/bugzilla
 
I think it isn't. The same error you get on attempt to use some identifier that found in two modules that are imported. And this is expected behaviour described in docs. My case is the same situation, but I search a way to cheat the compiler. -- Victor (aka nail) Nakoryakov nail-mail<at>mail<dot>ru Krasnoznamensk, Moscow, Russia
Apr 07 2006
parent Bruno Medeiros <brunodomedeirosATgmail SPAM.com> writes:
Victor Nakoryakov wrote:
 Sorry for delay, I'm totally forgot about my post :)
 
 Bruno Medeiros wrote:
 Hum, seems like a bug to me, do fill a report:
 http://d.puremagic.com/bugzilla
I think it isn't. The same error you get on attempt to use some identifier that found in two modules that are imported. And this is expected behaviour described in docs. My case is the same situation, but I search a way to cheat the compiler.
Yes, it seems like a similar error, yet I think mixins should allow for function overloading. I've submitted a bug report: http://d.puremagic.com/bugzilla/show_bug.cgi?id=96 Let's see how it turns out. -- Bruno Medeiros - CS/E student http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D
Apr 08 2006