On Thu, Nov 12, 2009 at 10:46 AM, Tomas Lindquist Olsen <tomas.l.ol...@gmail.com> wrote: > On Tue, Nov 10, 2009 at 1:27 AM, Bill Baxter <wbax...@gmail.com> wrote: >> On Mon, Nov 9, 2009 at 4:09 PM, Walter Bright >> <newshou...@digitalmars.com> wrote: >>> Looks like Bill Baxter is giving a presentation on D Nov. 18! >>> >>> http://www.nwcpp.org/ >> >> Yep, that's right, and I'd be quite grateful to you smart folks here >> if you could share your meta-programming favorites with me! If >> you've got a real-world example of meta-programming in D that you >> think is particularly handy, then please send it my way >> >> I'm looking for small-but-useful things that are easy to explain, and >> make something easier than it would be otherwise. Things like places >> where static if can save your butt, or loop unrolling, and passing >> code snippets to functions like in std.algorithm. >> >> Things like a compile-time raytracer or regexp parser (though quite >> cool!) are not what I'm after. Too involved for a short talk. >> >> --bb >> > > I think tuples are a good example of something that makes your life > easier, lately I've been very fond of this little snippet: > >>>>>>>>>>>>>>>>>>>>>>> > > void delegate() Bind(Args...)(void delegate(Args) dg, Args args) > { > struct Closure > { > Args arguments; > void delegate(Args) callee; > void call() > { > callee(arguments); > } > } > > auto c = new Closure; > > // foreach not strictly necessary, but ldc currently chokes on > just an assignment... I should fix that.. > foreach(i,a;args) > c.arguments[i] = a; > c.callee = dg; > > return &c.call; > } > > class C > { > void foo(int,float) {} > } > > void main() > { > auto c = new C; > auto dg = Bind(&c.foo, 1, 2.0f); > // register delegate somewhere > } > > <<<<<<<<<<<<<<<<<<<<<<<< > > Not sure if this gets easier in C++0x , haven't read up on that...
I think it does. C++0x has variadic templates. And some kind of lambdas/closure thing. So probably it can do something similar. Anyway, the meta- aspect of Bind seems kinda weak. Certainly a nice use of variadic templates and closures, though. --bb