我有8年的编码经验,但我从未见过将[]
作为参数传递给函数定义。
例如,以下代码(来自开源项目):
bree::porder(m_root, [] (treenode* node) { delete node; });
在我的编码生涯中,我始终将[]
定义为运算符重载符,而不是参数。
那么这个新语法意味着什么?
我正在使用Visual Studio 2003附带的编译器。如何更改上面的代码以便在VS 2003中编译?
答案 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);