Arjun
Arjun

Reputation: 169

Strange C++ syntax

I have 8 years of coding experience, but I have never seen the operator [] passed as a parameter to the function definition.

For example, the following code (from an open source project):

bree::porder(m_root, [] (treenode* node) { delete node; }); 

Throughout my coding life, I have always defined [] as an operator overloader, not as a parameter.

So what does this new syntax signify?

I am using the compiler that comes with Visual Studio 2003. How can I change the above code so that it will compile in VS 2003?

Upvotes: 8

Views: 873

Answers (3)

rerun
rerun

Reputation: 25505

That is a c++ lambda you could replace the code with a function object of the same definition. The link shows two examples one using Functor and one using a lambda.

Upvotes: 16

Michael Burr
Michael Burr

Reputation: 340466

As other answers have mentioned, its' a brand new syntax to support C++0x lambas. It is not supported in any version of Visual Studio prior to VS 2010, so to get that code snippet to work in VS 2003, you'll need to rejigger the code to use a function or functor object.

I think that something like the following might work for you:

// somewhere where it would be syntactically valid to 
//  define a function
void treenode_deleter(treenode* node)
{
    delete node;
}


// ...

bree::porder(m_root, treenode_deleter); 

Upvotes: 5

Rob Agar
Rob Agar

Reputation: 12469

It looks like the C++0x syntax for an anonymous function

Upvotes: 5

Related Questions