On Thu, Nov 12, 2009 at 8:24 PM, Bill Baxter <wbax...@gmail.com> wrote: > 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 >
Just read the Wikipedia entries on Metaprogramming and Template_metaprogramming, I guess I wasn't really aware of the difference. Seems a lot harder to come up with small real-world snippets of the former.