Question about std.bind

Dmitry Olshansky dmitry.olsh at gmail.com
Fri Nov 12 12:14:01 PST 2010


On 12.11.2010 22:05, Russel Winder wrote:
> I have a function with signature:
>
>          void partialSum ( immutable long start , immutable long end , immutable real delta )
>
> (it turns out the immutable is not a factor here I tried without it and
> with const.)
>
> I have a thread creation loop:
>
>          foreach ( i ; 0 .. numberOfThreads ) { threads[i] = new Thread ( bind (&  partialSum , 1 + i * sliceSize , ( i + 1 ) * sliceSize , delta ) ) ; }
>
I'd try to replace bind with delegate:
threads[i] = new Thread( (){ return partialSum(1 + i * sliceSize, (i + 
1) * sliceSize, delta); } );

I'm not sure if std.bind works now, and why we even need it in D2 since 
it's functionality is completely superseded by delegates.
Well if Q was about D1...
> but this does not work.  I get the error message as below.  I really
> haven't a clue what I am doing wrong, but I bet it is something
> trivially simple.
>
>          dmd -I. -O -release -inline -c -ofpi_d2_threads.o pi_d2_threads.d
>          /home/users/russel/lib.Linux.x86_64/DMD2/bin/../../src/phobos/std/traits.d(185): Error: static assert  "argument has no parameters"
>          /home/users/russel/lib.Linux.x86_64/DMD2/bin/../../src/phobos/std/bind.d(977):        instantiated from here: ParameterTypeTuple!(const(EmptySlot)*)
>          /home/users/russel/lib.Linux.x86_64/DMD2/bin/../../src/phobos/std/bind.d(1003):        instantiated from here: FuncReferenceParamsAsPointers_impl!(NullAlias)
>          /home/users/russel/lib.Linux.x86_64/DMD2/bin/../../src/phobos/std/bind.d(338):        instantiated from here: FuncReferenceParamsAsPointers!(NullAlias)
>          /home/users/russel/lib.Linux.x86_64/DMD2/bin/../../src/phobos/std/bind.d(660):        instantiated from here: BoundFunc!(void function(immutable immutable(long) start, immutable immutable(long) end, immutable immutable(real) delta),NullAlias,Tuple!(long,long,immutable(double)))
>          pi_d2_threads.d(31):        instantiated from here: bind!(void function(immutable immutable(long) start, immutable immutable(long) end, immutable immutable(real) delta),long,long,immutable(double))
>


-- 
Dmitry Olshansky



More information about the Digitalmars-d mailing list