Странный синтаксис C ++ - PullRequest
8 голосов
/ 24 июля 2011

У меня 8-летний опыт кодирования, но я никогда не видел, чтобы оператор [] передавался как параметр в определение функции.

Например, следующий код (из проекта с открытым исходным кодом):

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

На протяжении всей моей жизни в кодировании я всегда определял [] как оператор перегрузки, а не как параметр.

Так что означает этот новый синтаксис?

Я использую компилятор, который поставляется с Visual Studio 2003. Как я могу изменить приведенный выше код, чтобы он компилировался в VS 2003?

Ответы [ 3 ]

16 голосов
/ 24 июля 2011

Это c ++ лямбда , вы можете заменить код функциональным объектом того же определения. Ссылка показывает два примера, один из которых использует Functor, а другой - лямбду.

5 голосов
/ 24 июля 2011

Как уже упоминалось в других ответах, это новый синтаксис для поддержки C ++ 0x lambas.Он не поддерживается ни в одной версии Visual Studio до VS 2010, поэтому, чтобы этот фрагмент кода работал в VS 2003, вам нужно перенастроить код, чтобы использовать объект функции или функтора.

Iдумаю, что что-то вроде следующего может работать для вас:

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


// ...

bree::porder(m_root, treenode_deleter); 
5 голосов
/ 24 июля 2011

Это похоже на синтаксис C ++ 0x для анонимной функции

...