Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
May 21, 2007 multiple opApply functions? | ||||
---|---|---|---|---|
| ||||
Is it possible to have multiple opApply calls for a single class? The following code almost compiles. It appears gdc 0.23 (implementing dmd 1.007) tries to match against the first opApply instead of finding the correct match (the 2nd opApply). The compiler knows the first one is a bad match, gives an error, and exits. How do I overcome this? interface X(T,P){ int opApply(int delegate(P)); int opApply(int delegate(T)); int opApply(int delegate(P,T)); } class Y(T,P) : public X(T,P){ ... } int main(){ Y y = new Y!(int,float)(...); foreach(int x; y){ ... } } |
May 21, 2007 Re: multiple opApply functions? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jason House | Jason House wrote: > Is it possible to have multiple opApply calls for a single class? The following code almost compiles. It appears gdc 0.23 (implementing dmd 1.007) tries to match against the first opApply instead of finding the correct match (the 2nd opApply). > > The compiler knows the first one is a bad match, gives an error, and exits. How do I overcome this? > > interface X(T,P){ > int opApply(int delegate(P)); > int opApply(int delegate(T)); > int opApply(int delegate(P,T)); > } > > class Y(T,P) : public X(T,P){ > ... > } > > int main(){ > Y y = new Y!(int,float)(...); > foreach(int x; y){ > ... > } > } Random thought: aren't those delegates supposed to be "int delegate(ref P)"? I'm pretty sure DMD is touchy about that... -- int getRandomNumber() { return 4; // chosen by fair dice roll. // guaranteed to be random. } http://xkcd.com/ v2sw5+8Yhw5ln4+5pr6OFPma8u6+7Lw4Tm6+7l6+7D i28a2Xs3MSr2e4/6+7t4TNSMb6HTOp5en5g6RAHCP http://hackerkey.com/ |
May 21, 2007 Re: multiple opApply functions? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jason House |
Just realised; if that version of gdc only implements D v1.007, you might need to try "inout" instead of "ref".
--
int getRandomNumber()
{
return 4; // chosen by fair dice roll.
// guaranteed to be random.
}
http://xkcd.com/
v2sw5+8Yhw5ln4+5pr6OFPma8u6+7Lw4Tm6+7l6+7D i28a2Xs3MSr2e4/6+7t4TNSMb6HTOp5en5g6RAHCP http://hackerkey.com/
|
May 22, 2007 Re: multiple opApply functions? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Daniel Keep | Daniel Keep wrote:
> Just realised; if that version of gdc only implements D v1.007, you
> might need to try "inout" instead of "ref".
>
That worked, but now I'm confused... isn't inout the default way of passing parameters into functions? I thought inout was assumed.
|
May 22, 2007 Re: multiple opApply functions? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jason House | "Jason House" <jason.james.house@gmail.com> wrote in message news:f2tj95$2llq$1@digitalmars.com... > Daniel Keep wrote: >> Just realised; if that version of gdc only implements D v1.007, you might need to try "inout" instead of "ref". >> > > That worked, but now I'm confused... isn't inout the default way of passing parameters into functions? I thought inout was assumed. No; inout is "by reference." The default is in, which means "by value." |
May 22, 2007 Re: multiple opApply functions? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley | Jarrett Billingsley wrote:
> "Jason House" <jason.james.house@gmail.com> wrote in message news:f2tj95$2llq$1@digitalmars.com...
>> Daniel Keep wrote:
>>> Just realised; if that version of gdc only implements D v1.007, you
>>> might need to try "inout" instead of "ref".
>>>
>> That worked, but now I'm confused... isn't inout the default way of passing parameters into functions? I thought inout was assumed.
>
> No; inout is "by reference." The default is in, which means "by value."
But if you're passing a reference (a class instance or array) then "by value" means the pointer to the class or array is passed by value. Modifications to the contents are visible to the caller, modification of the pointer itself is not.
--bb
|
May 22, 2007 Re: multiple opApply functions? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bill Baxter | "Bill Baxter" <dnewsgroup@billbaxter.com> wrote in message news:f2uij0$2a3e$1@digitalmars.com... > > But if you're passing a reference (a class instance or array) then "by value" means the pointer to the class or array is passed by value. Modifications to the contents are visible to the caller, modification of the pointer itself is not. > > --bb Good clarification. |
Copyright © 1999-2021 by the D Language Foundation