Have you heard that a new c++ draft is coming soon? It’s called c++0x for the moment and includes some new cool features.
A good description of the new features.
Basics
I’ve been recently playing around with lambda function support and looks pretty stable in the gcc compiler. I haven’t tried but I read that VC2010 has lambda support as well.
It gives support for in-place anonymous function definitions with context access, which basically helps us in a lot of situations, for example, if a given function, say wait_5minutes_call(callback_function), requires a callback we could easily do:
wait_5minutes_call( [ ](){ std::cout << "Callback called\n";} );
And thats all!! cool isn’t it?
A more complete example:
#include <iostream> #include <functional> #include <algorithm> void print_function(int size, std::function funct){ std::cout << funct(size) << std::endl; } int main(int argc, char* argv[]) { auto myfnc = [](int size){return size*size;}; print_function(10,myfnc); return 0; }
The syntax is:
[howtogetcontext](ptype parameter){body} // implicit return type resolution [howtogetcontext](ptype parameter) ->returntype {body} // explicit return type resolution
howtogetcontext specifies how we get the context, it can be [&] by ref or [=] by value(a copy), or we can say [&,variablename] for get everything by ref except variablename.
What is the context?
The context are the variables scoped in the place we define the lambda function.
Yes, we can access those variables even if we pass the lambda function far away of the current scope definition. Of course if any of those variables went out-of-scope or was freed and we refer to them by reference we’ll get a big crash, there’s no magic Image may be NSFW.
Clik here to view. .
We can access everything that is in scope on definition, locals, even this pointer if the function was defined inside an object method, actually, any method defined inside an class method is a friend of the class.
Ok, how do I get those cool lambda functions?
Easy.
We need to download the gcc development branch for lambda, as the trunk doesn’t have lambda support.
svn co svn://gcc.gnu.org/svn/gcc/branches/cxx0x-lambdas-branch gcc-lambda mkdir build cd build # Compilation can take several hours, depends on your machine ../gcc-lambda/configure --program-prefix=lambda --disable-libgcj --enable-languages=c++ --disable-werror make -j3 make install
Now you have a lambdag++ binary in your system which you can use to compile c++ code with lambdas just like this:
lambdag++ --std=g++c0x main.cpp -o main
Don’t forget the –std=c++0x
Image may be NSFW.
Clik here to view.

Clik here to view.
