Thread overview | ||||||
---|---|---|---|---|---|---|
|
January 17, 2011 How to use std.bind? | ||||
---|---|---|---|---|
| ||||
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? |
January 17, 2011 Re: How to use std.bind? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sean Eskapp | On 2011-01-17 19:03:15 +0200, Sean Eskapp said:
> 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?
std.bind is scheduled for deprecation, use lambda-expressions instead
|
January 18, 2011 Re: How to use std.bind? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sean Eskapp | 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
|
January 18, 2011 Re: How to use std.bind? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lars T. Kyllingstad | On 1/18/11, Lars T. Kyllingstad <public@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 |
Copyright © 1999-2021 by the D Language Foundation