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