How to use std.bind?
Lars T. Kyllingstad
public at kyllingen.NOSPAMnet
Tue Jan 18 02:09:12 PST 2011
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
More information about the Digitalmars-d-learn
mailing list