Re: How to use std.bind?

2011-01-18 Thread Lars T. Kyllingstad
On Mon, 17 Jan 2011 17:03:15 +, 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


Re: How to use std.bind?

2011-01-18 Thread Andrej Mitrovic
On 1/18/11, Lars T. Kyllingstad public@kyllingen.nospamnet wrote:
 On Mon, 17 Jan 2011 17:03:15 +, 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


Re: How to use std.bind?

2011-01-17 Thread BlazingWhitester

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