How to use std.bind?
Andrej Mitrovic
andrej.mitrovich at gmail.com
Tue Jan 18 09:55:39 PST 2011
On 1/18/11, Lars T. Kyllingstad <public at kyllingen.nospamnet> wrote:
> On Mon, 17 Jan 2011 17:03:15 +0000, Sean Eskapp wrote:
>
>> I used to use boost::bind all the time, but std.bind has me stumped, as
>> I keep getting static asserts with a cryptic "argument has no
>> parameters" message. At this point, the code is just:
>>
>> class Foo
>> {
>> void bar(int i) { writeln(i); }
>> }
>>
>> void main()
>> {
>> auto foobar = new Foo;
>> bind(&foobar.bar, 5)();
>> }
>>
>> I've tried a myriad of different ways, but keep coming up with the same
>> error. Using bindAlias gives me an error that "std.bind.bindAlias(alias
>> FT) is not a function template.
>>
>> I'm using DMD v2.051 on a Windows platform. Help anybody?
>
> Like BlazingWhitester said, std.bind is scheduled for deprecation. (It
> will be marked as such starting with the next DMD release.) It is a
> relic from D1, and I don't think it has worked well with D2 for quite a
> while.
>
> Luckily, you don't need it at all. You can do the same thing with D2's
> built-in features, such as nested functions and lambdas.
>
> // Lambda example
> int add2(int i) { return i + 2; }
>
> void main()
> {
> auto seven = () { return add2(5); };
> assert (seven() == 7);
> }
>
> -Lars
>
This is better:
http://www.digitalmars.com/d/2.0/phobos/std_functional.html#curry
More information about the Digitalmars-d-learn
mailing list