奇怪的C ++语法

时间:2011-07-24 05:57:20

标签: c++ visual-c++ visual-studio-2003 lambda square-bracket

我有8年的编码经验,但我从未见过将[]作为参数传递给函数定义。

例如,以下代码(来自开源项目):

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

在我的编码生涯中,我始终将[]定义为运算符重载符,而不是参数。

那么这个新语法意味着什么?

我正在使用Visual Studio 2003附带的编译器。如何更改上面的代码以便在VS 2003中编译?

3 个答案:

答案 0 :(得分:16)

这是一个c ++ lambda,你可以用相同定义的函数对象替换代码。该链接显示了两个使用Functor的示例和一个使用lambda的示例。

答案 1 :(得分:5)

看起来像C++0x

anonymous function语法

答案 2 :(得分:5)

正如其他答案所提到的,它是一种支持C ++ 0x lambas的全新语法。在VS 2010之前的任何版本的Visual Studio中都不支持它,因此要使该代码段在VS 2003中工作,您需要重新调整代码以使用函数或仿函数对象。

我认为以下内容可能适合您:

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


// ...

bree::porder(m_root, treenode_deleter);