Re: How to use std.bind?
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?
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?
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