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... Nothing fancy, but it sure has made my life easier. -Tomas